一尘不染

带Nullable的条件运算符分配 类型?

c#

EmployeeNumber =
string.IsNullOrEmpty(employeeNumberTextBox.Text)
    ? null
    : Convert.ToInt32(employeeNumberTextBox.Text),

我经常发现自己想做这样的事情(这EmployeeNumberNullable<int>LINQ-to-SQL
dbml对象的属性,其中该列允许NULL值)。不幸的是,编译器认为“在’null’和’int’之间没有隐式转换”,即使这两种类型在对可空int的赋值操作中都是有效的。

据我所知,空合并合并运算符不是一个选项,因为如果不为null,则需要在.Text字符串上进行内联转换。

据我所知,唯一的方法是使用if语句和/或分两步进行赋值。在这种特殊情况下,我感到非常沮丧,因为我想使用对象初始值设定项语法,并且此分配将在初始化块中…

有人知道更优雅的解决方案吗?


阅读 226

收藏
2020-05-19

共1个答案

一尘不染

发生问题是因为条件运算符不会查看如何使用值(在这种情况下为赋值)来确定表达式的类型-只是true / false值。在这种情况下,您有一个 null
和一个 Int32 ,并且无法确定类型(确实有理由不能仅假设 Nullable )。

如果您确实想以这种方式使用它,则必须自己将值之一 强制转换Nullable ,以便C#可以解析该类型:

EmployeeNumber =
    string.IsNullOrEmpty(employeeNumberTextBox.Text)
    ? (int?)null
    : Convert.ToInt32(employeeNumberTextBox.Text),

要么

EmployeeNumber =
    string.IsNullOrEmpty(employeeNumberTextBox.Text)
    ? null
    : (int?)Convert.ToInt32(employeeNumberTextBox.Text),
2020-05-19