c# - 它可以返回null吗? (this.Result ==Result.OK)

标签 c# null return

这段代码可以返回null吗?

(this.Result == Result.OK)

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

最佳答案

(this.Result == Result.OK)

好的;让我们一 block 一 block 地看:

this.(anything)

如果 thisnull - 它永远不应该,那可能会失败,但是 theoretically can be if you are evil - 所以我们可能会因 NullReferenceException 而失败。

this.Result

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

Result.OK

现在;如果这是一个 enum,它只是一个 ldc - 但如果这个 .OK 实际上是一个静态属性访问器,它肯定会失败它喜欢的任何异常(exception)。

this.Result == Result.OK

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

但疯狂的是:== 不需要返回 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
}

如果 Result 类型是自定义的,那么 (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
    }
}

最后,我们需要考虑到像 ThreadAbortExceptionOutOfMemoryExceptionStackOverflowException 这样晦涩难懂的事情随时都可能发生 时间

但在理智的情况下:是的,它只能导致 bool 结果。

关于c# - 它可以返回null吗? (this.Result ==Result.OK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20285919/

相关文章:

c# - 将用户输入的日期时间转换为 UTC

c# - 在继承类中使用 ReactiveCommand 和 WhenAny

c - GetProcAddress 返回 NULL

java - 如何从另一个程序执行 jar 并在另一个程序中显示结果?

javascript - 将返回函数分配给另一个变量(this)

c - 这是什么意思?返回函数()

c# - 将 USER_ID_PROPERTY 添加到 Hashtable 时,MQQueueManager 构造函数失败

c# - 在 C# 中使用 'DefaultAudioEndpoint' 以外的音频端点

java - 即使为变量赋值后,变量仍为 null (Java)

php - MySQL:当某物等于 NULL 时会发生什么?