C# 三元表达式类型转换

标签 c# ternary-operator compile-time

为什么编译器不能自动正确地转换这个表达式中的值?

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 前面,它将编译并运行得很好。

最佳答案

这是因为 string 不能转换为 DbNull,反之亦然。使用三元运算符时,两个结果操作数必须兼容。

关于C# 三元表达式类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10590923/

相关文章:

c++ - 在编译时或至少在使用之前检查字符串是否包含禁止字符的任何创造性方法?

c# - 如何覆盖 ASP.NET MVC 3 默认模型绑定(bind)器以在模型创建期间解决依赖关系(使用 ninject)?

php - 为什么 unset() 在 PHP 三元运算符中不起作用

css - 使用三元运算符在 sass/React 中有条件地应用类

vhdl - VHDL有三元运算符吗?

c++ - sizeof(值)与 sizeof(类型)?

c++ - 确定函数返回类型的最简单方法

c# - 无法将参数传递给存储过程: parameters not supplied

c# - Microsoft.Win32.TaskScheduler 随机延迟

c# - linq 成员不支持 SQL 转换