您可以在 C# 本地函数中使用三元运算符吗?

Posted

技术标签:

【中文标题】您可以在 C# 本地函数中使用三元运算符吗?【英文标题】:Can you use a ternary operator in a C# local function? 【发布时间】:2022-01-07 06:32:10 【问题描述】:

这是我想要实现的:

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

【问题讨论】:

【参考方案1】:

三元运算符不是条件,而是计算结果为单个值的表达式。您必须返回的正是这个值:

return d.HasValue ? (int?)Convert.ToInt32(Math.Round(d.Value, 0)) : null;

注意,在 C# 9.0 之前,冒号左边的值和右边的值必须是相同的类型;因此,您需要在此处转换非空值。从 C# 9.0 开始,类型可以是 infered from the target type。

【讨论】:

【参考方案2】:

你应该可以这样写:

int? parseAppliedAmount(decimal? d) => d.HasValue ? Convert.ToInt32(Math.Round(d.Value, 0)) : null;

【讨论】:

以上是关于您可以在 C# 本地函数中使用三元运算符吗?的主要内容,如果未能解决你的问题,请参考以下文章

Python有三元条件运算符吗?

三元运算符可以等效于与逻辑运算符的短路吗?

C# 中的三元运算符关联性 - 我可以依赖它吗?

在 C# 中创建元组时编译错误,没有括号包围三元运算符

Django 模板三元运算符

你可以使用jQuery的三元运算符吗?