gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:50:18 26 4
gpt4 key购买 nike

这段代码可以返回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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com