ジェネリックコレクションに非ジェネリックコレクションを変換するための最良の方法
-
06-09-2019 - |
質問
ジェネリックコレクションに非ジェネリックコレクションを変換するための最良の方法は何ですか?それをLINQする方法はありますか?
私は、次のコードを持っています。
public class NonGenericCollection:CollectionBase
{
public void Add(TestClass a)
{
List.Add(a);
}
}
public class ConvertTest
{
public static List<TestClass> ConvertToGenericClass( NonGenericCollection collection)
{
// Ask for help here.
}
}
ありがとうございます。
解決
あなたは、彼らがすべてのTestClassをインスタンスしている保証 LINQキャストを使用することができますので、< T>メソッドでます:
public static List<TestClass> ConvertToGenericClass(NonGenericCollection collection)
{
return collection.Cast<TestClass>().ToList();
}
編集:あなただけの(おそらく)異種コレクションのTestClassをインスタンスを望んでいたなら、OfTypeでそれをフィルタリングする
public static List<TestClass> ConvertToGenericClass(NonGenericCollection collection)
{
return collection.OfType<TestClass>().ToList();
}
他のヒント
別のエレガントな方法は、このようなラッパークラスを(私は私のユーティリティプロジェクトでこれを含める)を作成することです。
public class EnumerableGenericizer<T> : IEnumerable<T>
{
public IEnumerable Target { get; set; }
public EnumerableGenericizer(IEnumerable target)
{
Target = target;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public IEnumerator<T> GetEnumerator()
{
foreach(T item in Target)
{
yield return item;
}
}
}
あなたは今、これを行うことができます:
IEnumerable<MyClass> genericized =
new EnumerableGenericizer<MyClass>(nonGenericCollection);
あなたはその後、genericizedコレクションを中心に、通常の一般的なリストをラップできます。
おそらくない最良の方法、それが動作するはずです。
public class ConvertTest
{
public static List<TestClass> ConvertToGenericClass( NonGenericCollection collection) throws I
{
List<TestClass> newList = new ArrayList<TestClass>
for (Object object : collection){
if(object instanceof TestClass){
newList.add(object)
} else {
throw new IllegalArgumentException();
}
}
return newList;
}
}
所属していません StackOverflow