私のコード:
Type type = GetType(long?);
また
Type type = typeof(long?);
そこから「タイプ」が与えられた場合、「長い」文字列を取得するにはどうすればよいですか? 戻る?
私のコード:
Type type = GetType(long?);
また
Type type = typeof(long?);
そこから「タイプ」が与えられた場合、「長い」文字列を取得するにはどうすればよいですか? 戻る?
あなたはそれが書かれたものを手に入れることができません。それは単なる言語の省略形です。
ToString()
「System.Nullable`1[System.Int64]」を生成する必要があります
文字列として必要な場合は、辞書を作成できます。
var types = new Dictionary<Type, string>();
types.Add(typeof(long?), "long?");
ただし、これを検出することはできません。
types.Add(typeof(System.Nullable<long>), "System.Nullable<long>");
以来typeof(long?) == typeof(System.Nullable<long>)
これを試しましたか
Type type = typeof(long?);
Console.WriteLine(type.FullName);
ただし、すべてのプリミティブ型にはエイリアスがあるため、文字列 Long を取得することはできません。また、これらのエイリアスは型システムには表示されません。
このステートメントの System.Nullable`1[System.Int64] を取得する必要があります。適切な出力文字列を取得するには、コードをカスタマイズする必要があります
Type の Name プロパティを使用できますが、それは "long?" を返しません。long は System.Int64 型の言語構文シュガーです。
次のような一般的な引数の型を尋ねたいとします。
typeof(long?).GetGenericArguments().First().Name
ただし、これは c# 名ではなく、システム型名を返します。
つまり、そうでInt64
はありませんlong
不可能だよ。
Type type = typeof(long?);
とは単純にタイプが異なりValueType
ます。
System.ValueType
から派生しSystem.Object
、 ではありませんSystem.Type
。
long?
は単なる凝った書き方であるSystem.Nullable<long>
ため、タイプ isn ではありませんlong?
。どのタイプであるかを取得したい場合は、自分で解析する必要があります。
Type から Type を取得する場合System.Nullable<T>
は、次のT
コードが機能します。
Type t = typeof(long?);
t = t.FullName.StartsWith("System.Nullable") ? t.GenericTypeArguments[0] : t;
// t == typeof(long);