我可以在C#中使用Untyped Collection吗?

tze*_*nes 9 c# java collections

我正在将一些Java代码移植到C#,我跑过这个:

List<?>
Run Code Online (Sandbox Code Playgroud)

据我所知,这是一种List类型Unknown.结果我可以在其他地方指定类型(在运行时?我不确定).

C#的基本等价物是什么?

Igo*_*aka 6

我认为与Java的最佳匹配List<?>将是C#4.0 IEnumerable<out T>如果你有一个方法,List<?>你可以调用它,List<Object>List<String>像这样:

List<Object> objList = new List<Object>();
List<String> strList = new List<String>();

doSomething(objList); //OK
doSomething(strList); //OK

public void doSomething(List<?> theList) {
 ///Iterate through list
}
Run Code Online (Sandbox Code Playgroud)

IEnumerable<T>实际上是C#4.0 接口IEnumerable<out T>,这意味着,如果,例如,R派生自T,IEnumerable<T>可以分配给IEnumerable<R>.

所以,你所要做的就是让你doSomething进入DoSomething并接受IEnumerable<T>参数:

List<Object> objList = new List<Object>();
List<String> strList = new List<String>();

DoSomething(objList); //OK
DoSomething(strList); //OK

public void DoSomething<T>(IEnumerable<T> theList) {
 ///Iterate through list
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果C#4.0不可用,您可以随时回退到无类型IEnumerableIList.


SLa*_*aks 5

如果你想要一个可以容纳任何东西的列表,你可以使用一个List<object>或一个ArrayList.

如果您想要一个包含未知类型的强类型列表,您应该创建一个泛型类或方法并使用List<T>.

有关更具体的建议,请提供更多详细信息.