位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C# > 問(wèn)題詳情

C# 運(yùn)算符和可空類(lèi)型

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-07

    對(duì)于簡(jiǎn)單類(lèi)型(如int),可以使用+、-等運(yùn)算符來(lái)處理值。而對(duì)于對(duì)應(yīng)的可空類(lèi)型,這是沒(méi)有區(qū)別的:包含在可空類(lèi)型中的值會(huì)隱式轉(zhuǎn)換為需要的類(lèi)型,使用適當(dāng)?shù)倪\(yùn)算符。這也適用于結(jié)構(gòu)和自己提供的運(yùn)算符。例如:

    int? opl =5;

    int? result = opl * 2;

注意,其中result變量的類(lèi)型也是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 類(lèi)型的異常。

這就引出了一個(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)單可空類(lèi)型,該操作的結(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就不重要。

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部