gpt4 book ai didi

c# - VS调试问题,谁能帮我解释一下?

转载 作者:太空狗 更新时间:2023-10-29 17:58:52 25 4
gpt4 key购买 nike

一段C#代码

var isTrue = (new List<int>{1,2,3} is IEnumerable<object>);

我在代码执行中得到结果 false,但是当我将该代码复制到 WATCH 窗口时,结果是 true

最佳答案

这不是一个完整的答案(我不知道为什么会出现这个错误),但它揭示了调试器的不稳定行为,这显然是错误的。

首先也是最重要的:C# 不允许(AFAIK,CLR 也是)涉及值类型的类型变化;仅当涉及的类型之间存在身份保留转换时才允许使用方差,否则它将失败(值类型没有身份保留转换):

object[] oo = new int[] {1, 2, 3}; //will fail
IEnumerable<object> oo = new int[] {1, 2, 3}; //will fail

调试器的即时窗口明显错误,new List<int> { 1, 2, 3 } is IEnumerable<object>应该返回 false就像运行时一样。为什么返回 true ?因为有一个错误,就这样。

更令人困惑的是 new int[] { 1, 2, 3 } is IEnumerable<object>会正确返回 false什么时候int[]可隐式转换为 IEnumerable<int>List<int> 相同.

我发现后者正确行为的唯一原因是编译器已经将该表达式标记为始终 false带有警告,因此编译器分析数组场景的方式不同于任何其他 IEnumerable .

关于c# - VS调试问题,谁能帮我解释一下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47568083/

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