我有以下内容:
class MyClass {
public int? MyNullInt;
public string MyString;
};
以及以下内容:
from it in items
select new MyClass {
MyString = it.AString,
MyNullInt = (it.B == null) ? null : it.B % 2
}
据我了解from the MSDN,结构如下:
int? test = (true) ? null : 3;
是非法的...,因为编译器无法推断出表达式类型( ??! 是Nullable<int>
,对我来说...... )< / p>
那么,我的linq表达式中有任何解决方法吗?
答案 0 :(得分:7)
只需使用int?
显式转换为:
MyNullInt = (it.B == null) ? (int?) null : it.B % 2
或
MyNullInt = (it.B == null) ? null : (int?) it.B % 2
有关详细信息,请参阅Eric Lippert's blog Type inference woes, part one。
答案 1 :(得分:2)
您可以明确地将null
转换为(int?)
以通知编译器您的意图:
from it in items
select new MyClass {
MyString = it.AString,
MyNullInt = (it.B == null) ? (int?)null : it.B % 2
}
答案 2 :(得分:2)
条件表达式的两边必须相同,因此您可以使用default(int?)
代替null
强制类型,如下所示:
MyNullInt = (it.B == null) ? default(int?) : it.B % 2;
default(int?)
是null
,但编译器知道它的类型是int?
,因此编译表达式没有问题。