【发布时间】:2018-07-04 23:41:23
【问题描述】:
EmployeeNumber =
string.IsNullOrEmpty(employeeNumberTextBox.Text)
? null
: Convert.ToInt32(employeeNumberTextBox.Text),
我经常发现自己想做这样的事情(EmployeeNumber 是 Nullable<int>,因为它是 LINQ-to-SQL dbml 对象的属性,其中列允许 NULL 值)。不幸的是,编译器认为
'null' 和 'int' 之间没有隐式转换
即使这两种类型在对可空 int 的赋值操作中都是有效的。
据我所知,使用空合并运算符不是一个选项,因为如果.Text 字符串不为空,则需要在该字符串上进行内联转换。
据我所知,唯一的方法是使用 if 语句和/或分两步分配它。在这种特殊情况下,我发现这非常令人沮丧,因为我想使用对象初始化器语法,而这个赋值将在初始化块中......
有人知道更优雅的解决方案吗?
【问题讨论】:
-
查看 Eric Lippert 的相关博文:Type inference woes, part one
-
Compiler Error CS0173 把我带到了这里。
-
C#9 支持target typing of conditional expressions,这会降低您遇到此问题的机会。在这个问题给出的示例中,如果
EmployeeNumber属性的类型是int?,编译器会推断出类型,但如果分配给更通用的类型,如object或新的声明var变量。
标签: c# conditional-operator nullable