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
{
...