在C#4,是不存在的,像這樣檢查空值的捷徑:C#4:如何在線檢測空值?
if(myobject?.myproperty?.myotherproperty?.value != null)
的值將返回null,而不是拋出異常。
任何人都有鏈接到如何使用它或至少是語法?
在C#4,是不存在的,像這樣檢查空值的捷徑:C#4:如何在線檢測空值?
if(myobject?.myproperty?.myotherproperty?.value != null)
的值將返回null,而不是拋出異常。
任何人都有鏈接到如何使用它或至少是語法?
該操作符在Groovy中被稱爲safe navigation operator。
這是不是在C#產品尚未推出,甚至沒有在C#4
如果有足夠多的人展示自己對它的支持,也許它會進入C#的一個假想的未來版本...
我認爲這是一個新特性在c#6 http://msdn.microsoft.com/en-us/magazine/dn802602.aspx – user65439 2014-12-09 13:18:05
不,對不起,沒有這樣的事情。他們確實考慮過它,但它didn't make the cut。
在C#/ C++,我可以使用三元運算符來實現這一點,儘管代碼很可怕。你確定要使用這個嗎?
如果((MYOBJECT = NULL(myobject.myproperty = NULL(myobject.myproperty.myotherproperty = NULL myobject.myproperty.myotherproperty.value:!?!?!?NULL):空):空)=空)
class MyOtherProperty
{
public string value;
}
class MyProperty
{
public MyOtherProperty myotherproperty;
}
class MyObject
{
public MyProperty myproperty;
}
我的單元測試代碼:
[TestMethod()]
public void TestTernaryOperator()
{
MyObject myobject = new MyObject();
Debug.WriteLine (string.Format ("{0}, {1}", myobject != null, myobject.myproperty != null));
Debug.WriteLine(string.Format("IsNotNull = {0}", IsNotNull(myobject)));
myobject.myproperty = new MyProperty();
Debug.WriteLine (string.Format ("{0}, {1}, {2}", myobject != null, myobject.myproperty != null, myobject.myproperty.myotherproperty != null));
Debug.WriteLine(string.Format("IsNotNull = {0}", IsNotNull(myobject)));
myobject.myproperty.myotherproperty = new MyOtherProperty();
Debug.WriteLine (string.Format ("{0}, {1}, {2}, {3}", myobject != null, myobject.myproperty != null, myobject.myproperty.myotherproperty != null, myobject.myproperty.myotherproperty.value != null));
Debug.WriteLine(string.Format("IsNotNull = {0}", IsNotNull(myobject)));
myobject.myproperty.myotherproperty.value = "Hello world";
Debug.WriteLine(string.Format("{0}, {1}, {2}, {3}", myobject != null, myobject.myproperty != null, myobject.myproperty.myotherproperty != null, myobject.myproperty.myotherproperty.value != null));
Debug.WriteLine(string.Format("IsNotNull = {0}", IsNotNull(myobject)));
}
bool IsNotNull(MyObject myobject)
{
bool isNotNull = (myobject != null ? (myobject.myproperty != null ? (myobject.myproperty.myotherproperty != null ? myobject.myproperty.myotherproperty.value : null) : null) : null) != null;
return isNotNull;
}
我是一箇舊的unix和c的傢伙,所以我實際上更喜歡這種方法if(this == null)then if thisOtherThing == null)等。 – 2010-06-07 23:08:20
正如其他人所說,沒有內置的方法做它在C#。幾個月前,我寫了一個blog post約的方式使用表達式來做到這一點,有NullSafeEval
擴展方法:
if (myobject.NullSafeEval(o => o.myproperty.myotherproperty.value) != null)
...
但它只是一個概念證明,我沒有測試它徹底,這是相當慢...
在C#中還有??運算符用於測試null。這比稍微好點?運營商。
(X ?? -1)等價於(X = NULL X!?-1)
也被稱爲「空合併運算符」。其中一個很少使用的關鍵字。 – Syd 2010-06-07 23:14:12
相關http://stackoverflow.com/questions/2929836 – 2010-06-07 21:36:52