C# 它能返回null吗?(this.Result==Result.OK)

C# 它能返回null吗?(this.Result==Result.OK),c#,null,return,C#,Null,Return,这个代码能返回null吗 (this.Result == Result.OK) 此行(或类似行)是否可以返回除true或false(例如null)之外的任何内容?运算符将始终返回true或false。这是一个布尔值 应该注意的是,问题中的“或另一个”确实可以返回非真或假的内容。除非你告诉我们你的另一个想法是我们无法回答 这个答案假设表达式确实返回了一些东西。正如Marc Gravell指出的那样,异常可能会阻止它返回(取决于您如何考虑返回)。 马克还善意地指出,==可以重载。这样做并更改返回类

这个代码能返回null吗

(this.Result == Result.OK)

此行(或类似行)是否可以返回除
true
false
(例如null)之外的任何内容?

运算符将始终返回true或false。这是一个
布尔值

应该注意的是,问题中的“或另一个”确实可以返回非真或假的内容。除非你告诉我们你的另一个想法是我们无法回答

这个答案假设表达式确实返回了一些东西。正如Marc Gravell指出的那样,异常可能会阻止它返回(取决于您如何考虑返回)。
马克还善意地指出,
==
可以重载。这样做并更改返回类型几乎肯定不是一个好主意,但理论上似乎是可能的。

否,只能返回
,因为
==
是比较运算符,此语句始终返回
Bool

语句本身将返回
Bool
true或false

涉及的对象:

this.Result


可能是空的,当您询问它是否可以返回
null

时,这可能就是您所指的结果

  • 执行该行并返回true
  • 执行该行并返回false
  • 嗯,;让我们一块一块地看一下:

    this.(anything)
    
    如果
    ,则可能会失败-它永远不应该是空的,但是-因此我们可能会因
    空引用异常
    而失败

    this.Result
    
    如果这是一个属性访问器(a
    get
    ),那么它可能会以它喜欢的任何方式失败-它可能会抛出异常

    Result.OK
    
    现在;如果这是一个
    enum
    ,它只是一个
    ldc
    ——但是如果这
    .OK
    实际上是一个静态属性访问器,它肯定会失败,并且会出现任何它喜欢的异常

    this.Result == Result.OK
    
    我们需要知道
    .Result
    返回什么;如果我们假设它返回一个
    结果
    (我们不知道),那么我们仍然需要知道
    结果
    是什么:如果它是一个枚举,它将是一个直接的数字相等检查;如果它是一个可为空的枚举,则应用“提升”的相等规则,但仍然可以干净地解析。如果它是一个重载
    ==
    的自定义类型,那么可能会发生任何事情,并导致任何异常

    但这里有一个疯狂的地方:
    ==
    不需要返回
    bool

    public static int operator ==(int x, Foo foo)
    {
        return 0; // DO NOT EVER DO THIS
    }
    public static int operator !=(int x, Foo foo)
    {
        return 0; // DO NOT EVER DO THIS
    }
    
    如果
    结果
    类型是自定义的,则
    (this.Result==Result.OK)
    可以返回它想要的任何内容

    using System;
    class P
    {
        static void Main()
        {
            new P().Test();
        }
        public Result Result { get; set; }
        public void Test()
        {
            var x = (this.Result == Result.OK);
            Console.WriteLine(x.GetType().Name); // Int32
        }
    }
    public class Result
    {
        public static Result OK { get { return null; } }
        public static int operator ==(Result x, Result y)
        {
            return 42; // DO NOT EVER DO THIS
        }
        public static int operator !=(Result x, Result y)
        {
            return 0; // DO NOT EVER DO THIS
        }
    }
    
    最后,我们需要考虑一些晦涩难懂的事情,如<代码> THEAD BABRUTTABLE < /COD>,<代码> OutOfMeMyExyExtExe> <代码>或<代码> StaskOffFurvieExp><代码>可以在任何时间<强> >


    但在正常情况下:是的,它只能产生一个
    bool
    结果。

    如果'this'的值为空,那么这个代码肯定会崩溃。我想它会返回boolean
    :)
    如果可能每隔一段时间返回一次。你需要的是
    if(this.Result==Result.OK)返回null??@xxMUROxx您对此有多确定<代码>此
    为空?呵呵?你是说那个角落的案子吗?哇,忘了那个property@MarcGravell你说得对,这就是我所问的
    你是在谈论角落案例吗?
    如果你删除第3点,我将删除我的反对票,并向上投票给你。因为这是错误的和误导的,我已经取消了我自己的答案,因为MarcGravel添加了一些东西。还是去吧right@AgnelKurian加载常量值的IL指令-例如,
    ldc.i4
    (又名十六进制20),后跟4个字节,将常量
    int
    加载到堆栈上(常用数字有特殊代码,或适合单个字节的数字等)。可能需要重新表述“如果您认为结果类型是自定义的”。您错过了一个案例,即它由于一段时间而从未返回(true):@mcintyre321 d'oh!我想总有另一种crazy@Chris如果我真的很邪恶,我也会超载
    true
    。@MarcGravel:我也不会简单地在那里使用这个词。你已经证明它是不正确的,但我认为这根本不是一个简单的例子
    using System;
    class P
    {
        static void Main()
        {
            new P().Test();
        }
        public Result Result { get; set; }
        public void Test()
        {
            var x = (this.Result == Result.OK);
            Console.WriteLine(x.GetType().Name); // Int32
        }
    }
    public class Result
    {
        public static Result OK { get { return null; } }
        public static int operator ==(Result x, Result y)
        {
            return 42; // DO NOT EVER DO THIS
        }
        public static int operator !=(Result x, Result y)
        {
            return 0; // DO NOT EVER DO THIS
        }
    }