-1

不要问我为什么,但我需要做到以下几点:
string cName = "ClassA";
List<cName> l = new List<cName>();
我该怎么做?

我的代码: 对象 - 它是一个类
public void MergeForm(List<object> lModel)
{
string className = lModel[0].GetType().Name;
List<className> list = new List<className>();
}

4

4 回答 4

3

您不能拥有List<cName>静态类型,但您可以创建实例:

IList l = (IList)Activator
    .CreateInstance(typeof(List<>)
    .MakeGenericType(Type.GetType(cName)));

cName不过,它必须是完全限定的名称。

于 2013-10-24T11:48:51.900 回答
3

使用Assemmbly.GetTypes

var l = Assembly.GetTypes().Where(t => t.Name == "ClassA").ToList();

如果您有完整的类型名称,则可以使用Assemmbly.GetType.

如果您有完整的类型名称和程序集限定名称,并且您寻找的类型在另一个程序集中,则使用Type.GetType.

于 2013-10-24T11:47:58.430 回答
0
Type ac;
string cName = "ClassA";
switch (cName)
{
case "ClassA":
ac = typeof(ClassA);
break;
case "ClassB":
ac = typeof(ClassB);
break;
default:
ac = typeof(System.String);    
break;
}
var genericListType = typeof(List<>);
var specificListType = genericListType.MakeGenericType(ac);
var l= Activator.CreateInstance(specificListType);
于 2013-10-24T11:57:50.230 回答
0

看一下Activator.CreateInstance方法。

于 2013-10-24T11:47:27.217 回答