gpt4 book ai didi

c# - 动态字段 const 与任何旧的引用字段 const 行为

转载 作者:太空狗 更新时间:2023-10-29 21:34:28 25 4
gpt4 key购买 nike

这可能有一个我没有看到的简单解释,但为什么以下代码是合法的:

    public struct Foo
{
const object nullObject = null;

public override string ToString()
{
if (nullObject == null)
{
return base.ToString();
}

}
}

虽然下面,

    public struct Foo
{
const dynamic nullObject = null;

public override string ToString()
{
if (nullObject == null)
{
return base.ToString();
}

}
}

给出以下编译时错误:Foo.ToString()': not all code paths return a value?

为什么 nullObjectdynamic 的事实使得编译器无法断言 nullObject 将始终是 null?

编辑:扩展问题,并基于 smoore's回答,为什么编译器允许 dynamic const 字段开头?这不是自取灭亡吗?我知道这个场景根本没有实际应用,坦率地说它毫无意义,但我偶然发现它只是出于好奇。

最佳答案

因为 dynamic对象不会在编译时解析,因此编译器不知道它永远为空。直到运行时才会解析动态对象。

编辑:

我明白你的困惑,为什么还要允许 const 动态?

我的猜测是 Dynamic 可以更改为不可为 null 的类型,在这种情况下 ToString 不会返回值,但这只是一个猜测。我还认为您可能仍然希望能够拥有一个常量动态,这样您就可以确保值不会在静态构造函数之外更改,但直到运行时才知道类型。

正如 Servy 指出的那样,另一种可能性是它是一种极端情况,不值得修复。

关于c# - 动态字段 const 与任何旧的引用字段 const 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16465814/

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