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

Vin*_*e I 1 c# conditional-operator local-functions

这是我想要实现的:

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...
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到编译错误。这种语法可能吗?我使用的是 Visual Studio 2019、.NET Framework 4,(当前)相当于 C# 7.3。

注意 - 我只是想弄清楚语法......任何关于代码“可读性”或其他美学的哲学讨论虽然有趣,但都不是重点。:)

代码示例(使用 Roslyn 4.0) https://dotnetfiddle.net/TlDY9c

Tho*_*ser 6

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

return d.HasValue ? (int?)Convert.ToInt32(Math.Round(d.Value, 0)) : null;
Run Code Online (Sandbox Code Playgroud)

请注意,在 C# 9.0 之前,冒号左侧的值和右侧的值必须是同一类型;因此,您需要在此处强制转换非空值。从 C# 9.0 开始,可以从目标类型推断类型。