3

我使用 Chart 类 WPFToolKit,我想通过字符串调用构造函数来缩短下面的代码

switch (node.Attributes["type"].Value)
{
    case "ColumnSeries":
        ans = new ColumnSeries();
        break;
    case "PieSeries":
        ans = new PieSeries();
        break;
    case "AreaSeries":
        ans = new AreaSeries();
        break;
    case "BarSeries":
        ans = new BarSeries();
        break;
    case "LineSeries":
        ans = new LineSeries();
        break;
}

搜索后我找到以下代码:

Type type = Type.GetType(node.Attributes["type"].Value);
Console.WriteLine(type == null);
ConstructorInfo ctor = type.GetConstructor(new Type[] { });
object instance = ctor.Invoke(new object[]{});

但奇怪的是,类型总是空的,我不知道为什么。谁能告诉我?谢谢。

4

2 回答 2

6

如果你的类有一个公共的默认构造函数,你可以使用Activator.CreateInstance(Type.GetType("your type")). 但请确保您给它提供完整的类型名称(使用“System.Int64”之类的命名空间)。

参考:http: //msdn.microsoft.com/en-us/library/wccyzw83.aspx

更新:

如果该类型在另一个程序集中,请参阅此 SO 问题以了解如何获取该类型。

于 2012-09-24T01:36:24.643 回答
2

Type.GetType需要一个程序集限定名称:

这是有关它的文档:“要获取的类型的程序集限定名称。如果该类型在当前执行的程序集中或在 Mscorlib.dll 中,则提供由其命名空间限定的类型名称就足够了。”

这包括名称空间和类型的程序集。例如,字符串类的程序集限定名称是这样的:

“System.String,mscorlib,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089”

(我得到了Console.WriteLine(typeof(string).AssemblyQualifiedName);

于 2012-09-24T01:36:56.840 回答