List<T>
に直接キャストすることはできませんpList<T>
。拡張メソッドを作成できます(のようにToList
)。IEnumerable<T>
クラスに、リストにデータを入力するためのコンストラクターがあると仮定します。
static class EnumerableExtensions
{
static pList<T> ToPList<T>(this IEnumerable<T> sequence) { return new pList<T>(sequence); }
}
クラスにそのようなコンストラクターがない場合は、コンストラクターを追加するか、次のようにすることができます。
static class EnumerableExtensions
{
static pList<T> ToPList<T>(this IEnumerable<T> sequence)
{
var result = new pList<T>();
foreach (var item in sequence)
result.Add(item);
return result;
}
}
私のpListクラスには、IEnumerableを受け取るコンストラクターがあり、拡張メソッドが追加されていますが、リスト内にToPList()が表示されません。何かが足りませんか?
まず、そのようなコンストラクターがあり、既存のList<T>
ものをに変換したいpList<T>
場合は、もちろんこれを行うことができます。
List<T> originalList = GetTheListSomehow();
var newList = new pList<T>(originalList);
拡張メソッドを使用するには、メソッドがスコープ内にあることを確認する必要があります。例にアクセス修飾子を追加しませんでした。必要に応じて、入れたり入れinternal
たりpublic
します。
public static class EnumerableExtensions
{
internal static pList<T> ToPList<T> //...
また、別の名前空間で拡張メソッドを使用する場合はusing
、スコープ内にディレクティブが必要です。例えば:
namespace A { public static class EnumerableExtensions { ...
他の場所:
using A;
// here you can use the extension method
namespace B
{
public class C
{
...
また
namespace B
{
using A;
// here you can use the extension method
public class C
{
...