C# 運算符和可空類型
對于簡單類型(如int),可以使用+、-等運算符來處理值。而對于對應(yīng)的可空類型,這是沒有區(qū)別的:包含在可空類型中的值會隱式轉(zhuǎn)換為需要的類型,使用適當(dāng)?shù)倪\算符。這也適用于結(jié)構(gòu)和自己提供的運算符。例如:
int? opl =5;
int? result = opl * 2;
注意,其中result變量的類型也是int?。下面的代碼不會被編譯:
int? opl = 5;
int result = opl * 2;
為使上面的代碼正常工作,必須進行顯式轉(zhuǎn)換:
int? opl = 5;
int result = (int) opl * 2;
或通過Value屬性訪問值:
int? opl = 5;
int result = opl.Value * 2;
只要opl有一個值,上面的代碼就可以正常運行。如果opl是null,就會生成System.InvalidOperationException 類型的異常。
這就引出了一個很明顯的問題:當(dāng)運算表達式中的一個或兩個值是null時,例如,下面代碼中的opl,會發(fā)生什么情況?
int? opl = null;
int? op2 = 5;
int? result = opl * op2;
答案是:對于除了 bool?外的所有簡單可空類型,該操作的結(jié)果是null,可以把它解釋為“不能計算”。對于結(jié)構(gòu),可以定義自己的運算符來處理這種情況。對于bool?,為&和丨定義的運算符會得到非空返回值,這些運算符的結(jié)果十分符合邏輯,如果不需要知道其中一個操作數(shù)的值即可計算出結(jié)果,則該操作數(shù)是否為null就不重要。
點擊加載更多評論>>