C# 将对象强制转换为仅具有可用类型的泛型IEnumerable

C# 将对象强制转换为仅具有可用类型的泛型IEnumerable,c#,.net,generics,casting,C#,.net,Generics,Casting,像这样将对象强制转换回通用列表的正确代码是什么 Type x = typeof(MyClass); object o = new List<MyClass>(); List<x> l = o as List<x>; // Not working List l=(List)o; 或 列表l=o作为列表; 你是说 List<> l = o as List<>; 列表l=o作为列表; 在使用泛型类之前,这是不可能的: class

像这样将对象强制转换回通用列表的正确代码是什么

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

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

列表l=o作为列表;

你是说

List<> l = o as List<>;
列表l=o作为列表;
在使用泛型类之前,这是不可能的:

class C<T>
{
    public List<T> List = new List<T>();
}
C类
{
公共列表=新列表();
}
用法:

C<MyClass> c = new C<MyClass>();
c.List.Add(new MyClass());
C=newc();
c、 添加(新的MyClass());

我终于实现了OP的目标:

Type listType = typeof(List<>);
Type targetType = listType.MakeGenericType(typeof(YourClass));
List<YourClass> list = (List<YourClass>)Activator.CreateInstance(targetType);
Type listType=typeof(列表);
Type targetType=listType.MakeGenericType(typeof(YourClass));
List=(List)Activator.CreateInstance(targetType);
有关详细信息,请参阅。

对象testobject=new List();
object testobject = new List<string>();
List<string> list = (List<string>)testobject;
List=(List)testobject;
List employees=newlist{new employees{Id=Guid.NewGuid().ToString(),Name=“SOME”},new employees{Id=Guid.NewGuid().ToString(),Name=“SOME2”};
对象obj=员工;
列表未装箱=(列表)对象;

如果由于编译时不知道类型参数而无法使用泛型接口,但有非泛型接口可用,则可以使用该接口:

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

IList l = (IList)o;
l.Add(new MyClass());
Type x=typeof(MyClass);
对象o=新列表();
IList l=(IList)o;
l、 添加(新MyClass());

非泛型
IList
接口由泛型
List
类实现。

使用
List
而不是最后一行的List有什么原因吗?将列表强制转换为泛型列表的要求是否给定了类型对象?简而言之,您不能使用这种语法。也许你可以解释一下为什么你需要这个,有人可以建议一个更好的选择?Thx。但是如何使用“var c=new c();”?Thx:)但是我不想要我的类型的新实例,而是使用类型将对象o强制转换为List,这样我就可以调用Add-on了it@David:那么您想通过编程方式强制转换为仅在运行时才知道的类型?您否决了答案,因为海报在我发布答案后更改了问题。。。?
Type listType = typeof(List<>);
Type targetType = listType.MakeGenericType(typeof(YourClass));
List<YourClass> list = (List<YourClass>)Activator.CreateInstance(targetType);
object testobject = new List<string>();
List<string> list = (List<string>)testobject;
        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;
Type x = typeof(MyClass);
object o = new List<MyClass>();

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