1

オブジェクトを一般的なリストにキャストする正しいコードは何ですか?

Type x = typeof(MyClass);
object o = new List<MyClass>();

List<x> l = o as List<x>; // Not working

編集: 多分それはすべて明確ではなかった: オブジェクトは、コンパイル時に私が知らないジェネリック型のリストです..それにもかかわらず、リストには「追加」のような関数があり、とにかく呼び出すことができます:

l.Add((new MyClass() as object)) as x);
4

4 に答える 4

2
List<MyClass> l = (List<MyClass>)o;

また

List<MyClass> l = o as List<MyClass>;

意味ですか

List<> l = o as List<>;

これは、ジェネリッククラスを使用するまで不可能です。

class C<T>
{
    public List<T> List = new List<T>();
}

使用法:

C<MyClass> c = new C<MyClass>();
c.List.Add(new MyClass());

ついに私はOPの目標を達成しました:

Type listType = typeof(List<>);
Type targetType = listType.MakeGenericType(typeof(YourClass));
List<YourClass> list = (List<YourClass>)Activator.CreateInstance(targetType);

詳細については、 MSDNを参照してください。

于 2012-08-02T13:37:32.463 に答える
1

コンパイル時に型引数がわからないためにジェネリックインターフェイスを使用できないが、非ジェネリックインターフェイスを使用できる場合は、代わりに次のように使用できます。

Type x = typeof(MyClass);
object o = new List<MyClass>();

IList l = (IList)o;
l.Add(new MyClass());

非ジェネリックIListインターフェイスは、ジェネリックList<T>クラスによって実装されます。

于 2012-08-02T13:48:46.627 に答える
0
        List<Employee> employees = new List<Employee> { new Employee { Id = Guid.NewGuid().ToString(), Name = "SOME" }, new Employee { Id = Guid.NewGuid().ToString(), Name = "SOME2" } };

        object obj = employees;

        List<Employee> unBoxed = (List<Employee>)obj;
于 2012-08-02T13:43:27.157 に答える
0
object testobject = new List<string>();
List<string> list = (List<string>)testobject;
于 2012-08-02T13:39:13.830 に答える