3

ChartクラスのWPFToolKitを使用しており、Construtors by Stringを呼び出して、以下のコードを短くしたいと思います。

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[]{});

しかし不思議なことに、タイプは常にnullであり、その理由はわかりません。誰か教えてもらえますか?ありがとう。

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アセンブリ修飾名が必要です:

それに関するドキュメントは次のとおりです。

これには、名前空間と型のアセンブリが含まれます。たとえば、文字列クラスのアセンブリ修飾名は次のようになります。

"System.String、mscorlib、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089"

(私はそれを手に入れましたConsole.WriteLine(typeof(string).AssemblyQualifiedName);

于 2012-09-24T01:36:56.840 に答える