0

私のコード:

Type type = GetType(long?);

また

Type type = typeof(long?);

そこから「タイプ」が与えられた場合、「長い」文字列を取得するにはどうすればよいですか? 戻る?

4

5 に答える 5

4

あなたはそれが書かれたものを手に入れることができません。それは単なる言語の省略形です。

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>)

于 2012-09-27T13:09:09.480 に答える
0

これを試しましたか

Type type = typeof(long?);
Console.WriteLine(type.FullName);

ただし、すべてのプリミティブ型にはエイリアスがあるため、文字列 Long を取得することはできません。また、これらのエイリアスは型システムには表示されません。

このステートメントの System.Nullable`1[System.Int64] を取得する必要があります。適切な出力文字列を取得するには、コードをカスタマイズする必要があります

于 2012-09-27T13:08:20.930 に答える
0

Type の Name プロパティを使用できますが、それは "long?" を返しません。long は System.Int64 型の言語構文シュガーです。

于 2012-09-27T13:10:32.890 に答える
0

次のような一般的な引数の型を尋ねたいとします。

typeof(long?).GetGenericArguments().First().Name

ただし、これは c# 名ではなく、システム型名を返します。

つまり、そうでInt64はありませんlong

于 2012-09-27T13:10:35.187 に答える
0

不可能だよ。

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);
于 2012-09-27T13:11:28.010 に答える