2013-08-24 68 views
-1

我寫的兩行代碼對象引用不設置對值類型C#的對象的實例

1)

int i ; 
MessageBox.Show(i.ToString()); 

2)

string str; 
MessageBox.Show(str.ToString()); 

正如我沒有初始化任何變量和(1)返回0但(2)拋出異常說Object reference not set to an instance of an object

我不明白,字符串是值類型爲int,然後顯示此錯誤。

+1

我覺得第二個片段應該是'MessageBox.Show(str);'? –

+0

是的,它的MessageBox.Show(str);在snippet str中的 –

+0

本身就是一個字符串,所以不需要執行'str.ToString();'。 'MessageBox.Show(str);'就夠了? –

回答

3

....I can't understand that string is value type as int then this error is being occurred.

誰說字符串值類型?它的參考類型,你必須在使用它之前給它的價值,其他明智的你會得到你得到的錯誤。

int是值類型。即使你不初始化,則是由0.1

初始化,您可以做到這一點

string str = String.Empty; 

str = SomeFunctionReturningString(); 

if (!String.IsNullOrEmpty(str)) //cause that function can also return null. 
    MessageBox.Show(str); 
+0

like string是否有任何數據類型作爲引用類型? –

+0

yes'object'是除了class之外的一種數據類型。 –

+0

如果我聲明字符串併爲不同的五次賦值。 所以會有五個對象或只有一個對象被覆蓋。後者是 –

0

int是值類型,並且string是引用類型,所以它們是不同的。

當你有一個(類級變量),你不初始化,您聲明域的域值,那麼int將與作爲0它的默認值初始化。並且string字段將獲得參考類型的默認,該參考類型是null參考。

當你有一個局部變量,你必須一個值,你使用它之前分配給它。局部變量是在方法體(或構造函數,訪問器等)中聲明的變量。因此你的問題很混亂,因爲不清楚你是否有田地或當地人。

相關問題