[英]How do I detect a null reference in C#?
如何在C#中確定對象引用是否為空?如果它為null,則拋出異常?
即如果我傳入了類引用,我不知道它是否為null。
對null進行測試永遠不會*拋出異常
void DoSomething( MyClass value )
{
if( value != null )
{
value.Method();
}
}
*絕不應該永遠 。 正如@Ilya Ryzhenkov指出的那樣,MyClass的!=運算符的錯誤實現可能會引發異常。 幸運的是,Greg Beech有一篇關於在.NET中實現對象相等性的博文。
Robert說的是什么,但是對於那個特例,我喜歡用這樣的保護子句表達它,而不是將整個方法體嵌套在if塊中:
void DoSomething( MyClass value )
{
if ( value == null ) return;
// I might throw an ArgumentNullException here, instead
value.Method();
}
注意,在MyClass上定義運算符!=可能會導致檢查結果不同,以及稍后會發生NullReferenceException。 要絕對確定,請使用object.ReferenceEquals(value,null)
if(p != null)
{
DoWork(p);
}
此外,如果您想要檢測某個類是否屬於正確類型並且一次性使用它,那么'as'關鍵字會很有用。
IExample e = p as IExample;
if(e != null)
DoWork(e);
在上面的例子中,如果你要像e(IExample)那樣投射e,如果e沒有實現IExapmle,它將拋出異常。 如果你使用'as'而e沒有實現IExample e將只是null。
如果查看大多數.NET框架源代碼,您會看到他們將這樣的檢查放在其函數的頂部。
public void DoSomething(Object myParam)
{
if (myParam == null) throw new ArgumentNullException("myParam");
// Carry on
}
使用C#6.0,這更加優雅; 你可以在一行中做到:-)
value?.Method();
如果“value”為null,則不會發生任何事情 - 也不例外。
這是挑剔,但我總是把它們編碼為......
if (null == obj) {
obj = new Obj();
}
代替
if (obj == null) {
obj = new Obj();
}
避免意外寫作
if (obj = null) {
obj = new Obj();
}
因為
if (null = obj) {
obj = new Obj();
}
會給你一個編譯錯誤
(YourObject != Null)
你可以比較null嗎?
如果它為null而不是拋出異常,則可以初始化對象。 您可以使用Null Pattern。
或者,如果您使用值類型,則可以閱讀有關可空類型的內容: http : //www.c-sharpcorner.com/UploadFile/mosessaur/nullabletypes08222006164135PM/nullabletypes.aspx
我在應用程序的xaml.cs應用程序派生定義中:
private SortedList myList;
我希望能夠重用我的構造函數。 所以我需要:
if ( myList == null)
myList = new SortedList();
謝謝羅伯特!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.