私はT4を使用して一連の汎用クラスのコードを生成しようとしています。ジェネリックパラメータを持つクラスの名前?
リフレクションを使用してフルクラス名を取得する方法を知りたいですか?私が欲しいもの
public class Foo<TFirst, TSecond> {}
var type = typeof(Foo<,>);
var name = type.FullName; // returns "Foo`2"
ので、私は私がT4を使用してコードを生成していたとして、彼らは、タイプが知られていないことを
"Foo<TFirst, TSecond>"
ノートを書いた実際のジェネリックパラメータ名とフルネームであります私は、ジェネリックメソッドの中で、例として、コード生成のためにそれを使用するために正確な命名をしたいと思います。
私はthis answersを試しましたが、私が望んでいない既知のタイプを渡す必要があります。
サンプルコードの 'arg.FullName'が' null'を返します( 'arg.Name'は正しい名前を返します)ので、' arg.FullName'の代わりに 'arg.Name'を使用する必要があります。 – Evk
@エブク:それを見つけてくれてありがとう。私はもともと 'arg.Name'で試してみましたが、私が' arg.FullName'に変更して書いたときにSystem.String/System.Int32の例を与えると思いました。今修正しよう! –
ああ、ありがとう、私は 'string.Join("、 "、type.GetGenericArguments()。Select(t => t.FullName))'も試みたが、私はFullNameを使用していたのでnullを返していた。 –