第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問C#可以將值類型與NULL進(jìn)行比較

請問C#可以將值類型與NULL進(jìn)行比較

C#
慕妹3242003 2019-08-01 12:01:09
C#可以將值類型與NULL進(jìn)行比較我今天遇到了這種情況,不知道為什么C#編譯器沒有拋出錯誤。Int32 x = 1;if (x == null){     Console.WriteLine("What the?");}我搞不懂x怎么可能是空的。特別是由于此賦值肯定會引發(fā)編譯器錯誤:Int32 x = null;是否有可能x會變成NULL,微軟只是決定不把這個檢查放入編譯器中,還是完全錯過了呢?更新:在修改了編寫本文的代碼之后,編譯器突然想到了一個警告,即該表達(dá)式不可能為真。現(xiàn)在我真的迷路了。我將對象放入類中,現(xiàn)在警告已經(jīng)消失,但留下了一個問題,值類型最終是否為NULL?public class Test{     public DateTime ADate = DateTime.Now;     public Test ()     {         Test test = new Test();         if (test.ADate == null)         {             Console.WriteLine("What the?");         }     }}
查看完整描述

3 回答

?
慕慕森

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個贊


這是合法的,因?yàn)椴僮鞣剌d解析有唯一的最佳運(yùn)算符可供選擇。有一個=操作符,它接受兩個可空的INT。int local可轉(zhuǎn)換為可空int??瘴谋究赊D(zhuǎn)換為可空的int。因此,這是=操作符的合法用法,并且總是導(dǎo)致false。

同樣,我們還允許您說“if(x=12.6)”,這也總是false。INT局部可轉(zhuǎn)換為雙,文字可轉(zhuǎn)換為雙,顯然它們永遠(yuǎn)不會相等。


查看完整回答
反對 回復(fù) 2019-08-02
?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個贊

這不是一個錯誤,因?yàn)橛幸粋€(int?)轉(zhuǎn)換;它確實(shí)在給出的示例中生成警告:

表達(dá)式的結(jié)果總是‘false’,因?yàn)椤甶nt’類型的值永遠(yuǎn)不等于‘int’類型的‘null’?

如果你檢查IL,你會發(fā)現(xiàn)完全地移除無法到達(dá)的分支-它在發(fā)布版本中不存在。

不過,請注意為帶有相等運(yùn)算符的自定義結(jié)構(gòu)生成此警告。它曾用于2.0,但在3.0編譯器中則不然。代碼仍然被刪除(因此它知道代碼是不可訪問的),但是不會生成警告:

using System;struct MyValue{
    private readonly int value;
    public MyValue(int value) { this.value = value; }
    public static bool operator ==(MyValue x, MyValue y) {
        return x.value == y.value;
    }
    public static bool operator !=(MyValue x, MyValue y) {
        return x.value != y.value;
    }}class Program{
    static void Main()
    {
        int i = 1;
        MyValue v = new MyValue(1);
        if (i == null) { Console.WriteLine("a"); } // warning
        if (v == null) { Console.WriteLine("a"); } // no warning
    }}

與IL(用于Main)-注一切除了MyValue(1)(可能有副作用)已被移除:

.method private hidebysig static void Main() cil managed{
    .entrypoint    .maxstack 2
    .locals init (
        [0] int32 i,
        [1] valuetype MyValue v)
    L_0000: ldc.i4.1 
    L_0001: stloc.0 
    L_0002: ldloca.s v
    L_0004: ldc.i4.1 
    L_0005: call instance void MyValue::.ctor(int32)
    L_000a: ret 
}

這基本上是:

private static void Main(){
    MyValue v = new MyValue(1);}




查看完整回答
反對 回復(fù) 2019-08-02
?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個贊

不,Int32 x永遠(yuǎn)不會變成null.

如果您將一個int與NULL進(jìn)行比較,那么使用兩個int?s的比較操作符是適用的。

“為什么將值類型與空值進(jìn)行比較是一種警告?”文章會對你有幫助的。




查看完整回答
反對 回復(fù) 2019-08-02
  • 3 回答
  • 0 關(guān)注
  • 622 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號