2014-09-25 28 views
0

爲什麼下面的行工作:爲什麼可爲空<int>沒有任何成員?

int.Parse("SomeIntegerValue"); 

但以下不會:

int?.Parse("SomeIntegerValue"); 

對於第二個我以爲解析器無法解析int?的類型,所以我改變它到:

(int?).Parse("SomeIntegerValue"); 

但這也行不通。無論是做了更詳細的形式:

Nullable<int>.Parse("SomeIntegerValue"); 

(Nullable<int>).Parse("SomeIntegerValue"); 

這最後的版本告訴我,Nullable<int>是一個類型,但是喜歡一個變量使用,但後來連簡單int是一種類型的,對不對?

+2

讓我看看'Parse'方法:http://msdn.microsoft.com/en-us/library/b3h38hb0(v=vs.110).aspx – 2014-09-25 11:40:32

+0

你真的想要做什麼?把一個可能包含一個int的字符串放到一個int中,但是允許'「null」'或者一個空字符串?至於你的最後一點,嘗試'int.ToString()'將不起作用,因爲你使用了類似變量的類型,對吧? – doctorlove 2014-09-25 11:44:07

+0

@doctorlove:正確。我期待'int?'能夠'解析'int'可以'解析'的所有東西,再加上空字符串。我只是忘記了'int?'不是來自'int'的事實。 – dotNET 2014-09-25 11:47:10

回答

4

Nullable<T>是一個通用結構,其中T可以是任何ValueType,用戶定義或其他。

對於它有一個Parse()方法是沒有意義的,該方法僅適用於大約十幾種內置數據類型,對其他所有內容都沒有用處。

+0

grrrr ...爲什麼我沒有想到那件簡單的事情。 'Nullable '給你。 – dotNET 2014-09-25 11:42:40

+0

*理論上*,它可以在引擎蓋下使用['TypeDescriptor.GetConverter'](http://msdn.microsoft.com/en-us/library/ewtxwhzx(v = vs.110).aspx),但那會看起來像一個不必要的骯髒破解。通過簡單地使用高性能的靜態方法,沒有任何好處。 – Groo 2014-09-25 11:47:11

+0

你的觀點是合理的,但並非總是如此。例如,['Activator.CreateInstance '](http://msdn.microsoft.com/en-us/library/0hcyx2kd.aspx)不會對其簽名中的類型'T'進行任何限制,但實現如果您嘗試將其與沒有無參數構造函數的類型一起使用,將會拋出一個'MissingMethodException'。 – 2014-09-25 11:47:19

1

只是因爲Nullable<T>沒有Parse()方法。

相關問題