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

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

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

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

    int? opl =5;

    int? result = opl * 2;

注意,其中result變量的類型也是int?。下面的代碼不會被編譯:

    int? opl = 5;

    int result = opl * 2;

為使上面的代碼正常工作,必須進(jìn)行顯式轉(zhuǎn)換:

    int? opl = 5;

    int result = (int) opl * 2;

或通過Value屬性訪問值:

    int? opl = 5;

    int result = opl.Value * 2;

只要opl有一個值,上面的代碼就可以正常運(yùn)行。如果opl是null,就會生成System.InvalidOperationException 類型的異常。

這就引出了一個很明顯的問題:當(dāng)運(yùn)算表達(dá)式中的一個或兩個值是null時,例如,下面代碼中的opl,會發(fā)生什么情況?

    int? opl = null;

    int? op2 = 5;

    int? result = opl * op2;

答案是:對于除了 bool?外的所有簡單可空類型,該操作的結(jié)果是null,可以把它解釋為“不能計算”。對于結(jié)構(gòu),可以定義自己的運(yùn)算符來處理這種情況。對于bool?,為&和丨定義的運(yùn)算符會得到非空返回值,這些運(yùn)算符的結(jié)果十分符合邏輯,如果不需要知道其中一個操作數(shù)的值即可計算出結(jié)果,則該操作數(shù)是否為null就不重要。

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

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