ctr*_*yan 3 c# nullable conditional-operator
我知道我可以这样做:
Int32 tempInt;
Int32? exitNum;
if (Int32.TryParse(fields[13], out tempInt))
exitNum = tempInt;
else
exitNum = null;
Run Code Online (Sandbox Code Playgroud)
但为什么我不能这样做呢?
Int32 tempInt;
Int32? exitNum = Int32.TryParse(fields[13], out tempInt) ? tempInt : null;
Run Code Online (Sandbox Code Playgroud)
有没有办法使用条件运算符为可空值赋值?
SLa*_*aks 11
条件运算符的一侧必须可转换为另一侧的类型.
在你的情况下,你有int一面,另一边有null(无类型表达式).由于两侧都不与另一侧直接兼容,因此不起作用.
你需要确保至少有一方是int?铸造或通过书写new int?().
写 Int32.TryParse(fields[13], out tempInt) ? tempInt : new int?()
正如其他人所指出的那样,您必须确保条件运算符中存在一致的返回类型.(C#的一个微妙特征是,当我们必须在几个替代方案中为表达式生成一个类型时,所选择的替代方案总是在表达式中的某个位置 ;我们从不"魔术化"一个没有出现的类型.)
如果关于条件运算符的异常事实对您感兴趣,我推荐我关于这个主题的文章:
http://blogs.msdn.com/b/ericlippert/archive/tags/conditional+operator/
我想补充一点,这是编写扩展方法的好机会:
static class MyExtensions
{
public static int? ParseInt(this string s)
{
int value;
return Int32.TryParse(s, out value) ? value : (int?)null;
}
}
Run Code Online (Sandbox Code Playgroud)
而现在你可以说
int? exitNum = fields[13].ParseInt();
Run Code Online (Sandbox Code Playgroud)
这是更愉快的阅读.