将对象强制转换回通用列表的正确代码是什么?
Type x = typeof(MyClass);
object o = new List<MyClass>();
List<x> l = o as List<x>; // Not working
编辑: 也许并不是全部清楚:该对象是一个通用类型的列表,我在编译时不知道..然而List有像“Add”这样的函数,我可以调用,如:
l.Add((new MyClass() as object)) as x);
答案 0 :(得分: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。
答案 1 :(得分:1)
当通用接口不可用时,因为您在编译时不知道类型参数,但是非通用接口可用,您可以使用它:
Type x = typeof(MyClass);
object o = new List<MyClass>();
IList l = (IList)o;
l.Add(new MyClass());
非通用IList
接口由通用List<T>
类实现。
答案 2 :(得分:0)
object testobject = new List<string>();
List<string> list = (List<string>)testobject;
答案 3 :(得分: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;