私はこの拡張メソッド、GetPrettyName()
を持っています。これは基本的に次のとおりです。
public static string GetPrettyName(this Type type)
{
var retval = type.Name;
if (type.IsGenericType)
{
var genargNames = type.GetGenericArguments().Select(t => GetPrettyName(t));
var idx = type.Name.IndexOf('`');
var typename = (idx > 0) ? type.Name.Substring(0, idx) : type.Name;
retval = String.Format("{0}.{1}<{2}>", type.Namespace, typename, String.Join(", ", genargNames));
}
else if (type.IsArray)
{
retval = GetPrettyName(type.GetElementType()) + "[]";
}
else if (String.IsNullOrEmpty(retval))
{
retval = type.Name;
}
return retval;
}
それは各ジェネリック型パラメータに再帰的に動作し、近いコード表現へだ形式で完全な名前を作成します。私たちの目的には十分です(ここでメッセージを記録するのに使用されています)。ジェネリックスや配列を扱うことはできますが、Entity Frameworkプロキシはうまく処理されません。
出典
2016-09-30 21:15:41
Amy
ジェネリック型のIL表現とC#表現は同じ構文を使用せず、VBはもう一つのストーリー( 'Stack(Of Stack) ')です。したがって、それには「実際のソース表現」はありません。 – Lucero
あなたがしようとしていることは非常にわかりません... http://stackoverflow.com/questions/9811456/generics-with-ilのようなものは助けになるかもしれませんが、本当にタイプの文字列表現は必要ありませんILを生成する... –
私は同意しない、彼の質問は完全にはっきりしています。彼はちょうどILがどのように見えるのかという誤った考えを持っています。彼は出力が 'Stack'であることを望んでいます。彼はIL関連のことは一切欲しません。 –
Amy