2013-09-24 66 views
0

我是java程序員,我是C#的新手,我真的不明白爲什麼需要Nullable類型。任何人都可以解釋我嗎? 比如我有代碼:如何從方法返回null

XmlReader xr=... 
string propertyValue=xr.GetAttribute("SomeProperty"); 
if(propertyValue!=null) { 
//some code here 
} 

該類型的PropertyValue是「字符串」不是'字符串?但'GetAttribute'可以返回null。所以,實際上,我應該爲每個變量檢查​​它的值是否爲null,那麼爲什麼可以爲空類型'*?'一般需要。 它如何有用?

第二個問題: 如何用返回類型'string'寫入我自己的方法並從中返回null值?

+0

http://msdn.microsoft.com/en-us/library/s1ax56ch.aspx – SLaks

+0

在這個問題的關鍵概念的問題很簡單:挑選'string'作爲例子,因爲'string'不是一個結構體,它不適合。如果你做'int'這個例子,它可能會變得更加明瞭 –

回答

1

你可以有返回類型爲string,並返回null,因爲字符串是引用類型,它可以容納null爲好。

public string SomeMethod() 
{ 
    return null; 
} 

該類型的PropertyValue是 '字符串' 不是'字符串?

?數據類型是Nullable<T>數據類型只值類型的作品,因爲字符串是引用類型,你不能有string??只是語法糖。

在C#和Visual Basic中,通過使用 將值類型標記爲可爲空值?值類型之後的符號。

您還可以看到:Value Types and Reference Types

0

答到最後一個問題:

朗方式:

private string MethodReturnsString() 
{ 
    string str1 = "this is a string"; 
    return str1; 
} 

短道:

private string MethodReturnsString() 
{ 
    return "this is a string"; 
} 

STR1充滿:"this is a string" ,將被返回到調用它的方法。

調用此方法如下:

string returnedString; 
returnedString = MethodReturnsString(); 

returnedString將從MethodReturnsString();

1

Nullable<T>類型用於structs填充"this is a string"。這些有點類似於Java的原語(例如它們不能爲空),但是功能更加強大和靈活(例如,用戶可以創建它們自己的struct類型,並且可以在其上調用諸如ToString()的方法)。

當您想要一個可爲空的struct(「值類型」)時,使用Nullable<T>(或相同的T?)。 (「引用類型」)總是可爲空的,就像在Java中一樣。

E.g.

//non-nullable int 
int MyMethod1() 
{ 
    return 0; 
} 

//nullable int 
int? MyMethod2() 
{ 
    return null; 
} 

//nullable string (there's no such thing as a non-nullable string) 
string MyMethod3() 
{ 
    return null; 
}