可以在 C# 局部函数中使用三元运算符吗?
Can you use a ternary operator in a C# local function?
这是我想要实现的:
public static void foo()
{
// Local function
int? parseAppliedAmountTernary( decimal? d ) {
d.HasValue ? return Convert.ToInt32( Math.Round(d.Value, 0) ) : return null;
}
// The rest of foo...
}
但是,我遇到编译错误。这种语法甚至可能吗?我正在使用 Visual Studio 2019,.NET Framework 4,(当前)等同于 C# 7.3。
注意 - 我只是想弄清楚语法...任何关于代码“可读性”或其他美学的哲学讨论虽然很有趣,但都离题了。 :)
代码示例(使用 Roslyn 4.0)
https://dotnetfiddle.net/TlDY9c
你应该可以这样写:
int? parseAppliedAmount(decimal? d) => d.HasValue ? Convert.ToInt32(Math.Round(d.Value, 0)) : null;
三元运算符不是条件,而是计算结果为单个值的表达式。您必须 return:
这个值
return d.HasValue ? (int?)Convert.ToInt32(Math.Round(d.Value, 0)) : null;
注意,在C# 9.0之前,冒号左边的值和右边的值必须是同一类型;因此,您需要在此处强制转换非空值。从 C# 9.0 开始,类型可以是 infered from the target type.
这是我想要实现的:
public static void foo()
{
// Local function
int? parseAppliedAmountTernary( decimal? d ) {
d.HasValue ? return Convert.ToInt32( Math.Round(d.Value, 0) ) : return null;
}
// The rest of foo...
}
但是,我遇到编译错误。这种语法甚至可能吗?我正在使用 Visual Studio 2019,.NET Framework 4,(当前)等同于 C# 7.3。
注意 - 我只是想弄清楚语法...任何关于代码“可读性”或其他美学的哲学讨论虽然很有趣,但都离题了。 :)
代码示例(使用 Roslyn 4.0) https://dotnetfiddle.net/TlDY9c
你应该可以这样写:
int? parseAppliedAmount(decimal? d) => d.HasValue ? Convert.ToInt32(Math.Round(d.Value, 0)) : null;
三元运算符不是条件,而是计算结果为单个值的表达式。您必须 return:
这个值return d.HasValue ? (int?)Convert.ToInt32(Math.Round(d.Value, 0)) : null;
注意,在C# 9.0之前,冒号左边的值和右边的值必须是同一类型;因此,您需要在此处强制转换非空值。从 C# 9.0 开始,类型可以是 infered from the target type.