2012-09-27 43 views
0

我的代碼:「長」從類型得到一個值類型

Type type = GetType(long?); 

Type type = typeof(long?); 

給出從「類型」,我怎麼能得到字符串背部?

回答

0

你試試這個

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

但你不會得到字符串只要每隔原語類型有aliases.And這些別名不露面的類型系統。

你應該得到System.Nullable`1 [System.Int64]此statement.You還可自定義代碼,以獲得正確的輸出字符串

+0

對不起,是的,但它是同樣的問題。我會編輯 – Paul

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

+0

的問題是的,這就是問題所在,我真的需要找到 – Paul

+0

這個類型的短手,那就是我必須做的事情,ta – Paul

0

您可以使用Type的Name屬性,但是這不會重返「長」? long是System.Int64類型的語言語法糖。

0

你要問的類型,它是通用的參數,是這樣的:

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

然而,這將系統返回類型名稱,而不是C#的名字。

也就是說,Int64long

0

這是不可能的。

Type type = typeof(long?);

根本不同的類型ValueType

System.ValueType來自System.Object的皮帶,而不是System.Type

long?是寫System.Nullable<long>的只是一種奇特的方式,因此它的類型不是long?,如果你想要得到它是什麼類型,那麼你就必須自己解析它。

如果你想從System.Nullable<T>T類型類型那麼這段代碼將工作:

Type t = typeof(long?); 
t = t.FullName.StartsWith("System.Nullable") ? t.GenericTypeArguments[0] : t; 
// t == typeof(long);