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