Я думаю, что лучшим соответствием 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
}
C # 4.0 IEnumerable<T>
интерфейс на самом деле 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
}
РЕДАКТИРОВАТЬ: Если C # 4.0 недоступен,вы всегда можете вернуться к нетипизированному IEnumerable
или IList
.