将对象转换为通用列表

Joe*_*oco 13 c# generics list

我有3个generict类型列表.

List<Contact> = new List<Contact>();
List<Address> = new List<Address>();
List<Document> = new List<Document>();
Run Code Online (Sandbox Code Playgroud)

并将其保存在具有类型对象的变量上.现在我做了Cast back to List来执行foreach,有些像这样:

List<Contact> = (List<Contact>)obj;
Run Code Online (Sandbox Code Playgroud)

但obj内容每次都在变化,我有一些这样的:

List<???> = (List<???>)obj;
Run Code Online (Sandbox Code Playgroud)

我有另一个变量保持当前obj类型:

Type t = typeof(obj);
Run Code Online (Sandbox Code Playgroud)

我可以做那样的事吗??:

List<t> = (List<t>)obj;
Run Code Online (Sandbox Code Playgroud)

Obs:我没有列表中的当前类型,但我需要施放,而我现在不再使用另一种形式:

List<Contact> = new List<Contact>();
Run Code Online (Sandbox Code Playgroud)

Amy*_*y B 30

多么棘手的问题.试试这个:

List<Contact> c = null;
List<Address> a = null;
List<Document> d = null;

object o = GetObject();

c = o as List<Contact>;
a = o as List<Address>;
d = o as List<Document>;
Run Code Online (Sandbox Code Playgroud)

在c,a和d之间,有2个空值和1个非空值,或3个空值.


拿2:

object o = GetObject();
IEnumerable e = o as IEnumerable;
IEnumerable<Contact> c = e.OfType<Contact>();
IEnumerable<Address> a = e.OfType<Address>();
IEnumerable<Document> d = e.OfType<Document>();
Run Code Online (Sandbox Code Playgroud)


And*_*ais 27

大量的试验和错误在SL 5上给了我这个,但它也适用于普通的C#.您还需要将LINQ添加到您的使用列表中,以便后半部分正常工作.

    List<object> myAnythingList = (value as IEnumerable<object>).Cast<object>().ToList()
Run Code Online (Sandbox Code Playgroud)

请享用!