您可以創建一個通用列表,但它沒有用。如果你想擁有一個通用的List<T>
,你應該在其中某個地方加入你對於所需類型的先前知識。例如,你可以做這樣的事情:
if(className == "Employee") // this is where your prior knowledge is playing role
{
IList<Employee> lsPersons = (IList<Employee>)Activator.CreateInstance(
typeof(List<Employee>).MakeGenericType(Type.GetType(className))));
}
此外,您還可以通過這樣的事情做出任何類型的泛型列表:
public static class GenericListBuilder
{
public static object Build(Type type)
{
var obj = typeof(GenericListBuilder)
.GetMethod("MakeGenList", BindingFlags.Static|BindingFlags.NonPublic)
.MakeGenericMethod(new Type[] { type })
.Invoke(null, (new object[] {}));
return obj;
}
private static List<T> MakeGenList<T>()
{
return new List<T>();
}
}
,則有可能去消費,如:
var List<Employee> = GenericListBuilder.Build(typeof(Employee)) as List<Employee>;
或
IList list = GenericListBuilder.Build(Type.GetType(className)) as IList;
最後一行完全是盲目的,我認爲它非常接近你的想法。但它有什麼好處?我不認爲。
究竟你有什麼問題? –
「不起作用」不是一個有效的描述。當它「不起作用」時,我們無法幫助您。告訴我們你的嘗試和失敗。與特定的錯誤信息。 – nvoigt
你應該提一下你爲'className'使用的值。 –