5

私はこの問題を抱えています:

オブジェクト情報から新しいソースコードファイルを生成したい。

私はこのようなものを作ります:

dictParamMapping はDictionary<string, Type>、文字列が変数名で、Type がその変数の型です。

次を使用して新しいコードを作成するタイプを取得します。

dictParamMapping[pairProcess.Value].Type.Name (or FullName)

Type が int、string、datatable などの場合...すべて正常に動作しますが、辞書、リスト、またはその他の場合は、次のようなものを返します。

System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Double, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]

その新しいソース コードをビルドするのは正しくありません。次のようなものを取得したいDictionary<int, double>

誰でも私を助けることができますか?

4

2 に答える 2

3

から C# 互換の名前を取得したいようですSystem.TypeCSharpCodeProviderクラスでこれを行うことができます。

var typeReference = new CodeTypeReference(typeof(Dictionary<int, double>));

using (var provider = new CSharpCodeProvider())
    Console.WriteLine(provider.GetTypeOutput(typeReference));

出力:

System.Collections.Generic.Dictionary<int, double>

これは常に有効な型名を提供するとは限らないことに注意してください。特に、コンパイラによって生成された型 (クロージャなど) には、通常、C# では無効な型名があります。

于 2012-07-02T14:52:58.937 に答える
2

これは、.NET でソース コードを生成する理想的な方法ではありません。公式にサポートされている方法があります。

フレームワークによって公開される API はCodeDOMと呼ばれます。ドキュメントとサンプルを調べて、何ができるかを理解することができます。これは、クラスを生成する方法を示すスタートアップ サンプルです。CodeDOM は、出力言語として C# と VB.NET の両方をサポートしています。

于 2012-07-02T14:39:11.747 に答える