【发布时间】:2023-03-19 07:34:01
【问题描述】:
为什么编译器不能正确地自动转换这个表达式中的值?
var input = "Hello";
object x = string.IsNullOrEmpty(input) ? input : DBNull.Value;
//could try this too and get similar compile time error
object x2 = string.IsNullOrEmpty(input) ? 1 : input;
我了解 DBNull.Value 不能转换为字符串;但是,我很好奇为什么它不能合并成一个对象,因为结果只是存储一个引用。如果将(object) 放在 DBNull.Value 前面,它将编译并运行得很好。
【问题讨论】:
-
除 gdoron 之外的所有答案都没有抓住重点。这不是一个“嘿,帮我编译一下”的问题。更多的是询问为什么 c# 编译器不能或选择不能查看分配给的变量的类型与第二个和第三个参数中的变量类型。
-
找到了一个稍微不相关的问题的答案stackoverflow.com/a/2215959/186359 我认为它基本上证明了在评估表达式时不能添加信息(赋值变量的类型)。我认为这可能是真正的答案
标签: c# ternary-operator compile-time