你能在IF语句中使用三元表达式吗?

sab*_*669 0 .net c#

我只是在工作中用C#重写一个旧的C++应用程序,所以我觉得我会乱搞并尝试学习新的东西,而实际工作很慢.我认为这有点多余并且违背了IF/ELSE声明的目的,但是可以这样做吗?

public static bool IsAlpha(string s, bool allowSpaces)
{
    foreach (char c in s)
    {
        if (!(allowSpaces) ? (char.IsLetter(c) || c.Equals(' ')) : char.IsLetter(c))
            return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

基本上我只是想缩短它;

    alpha = (allowSpaces) ? (char.IsLetter(c) || c.Equals(' ')) : char.IsLetter(c);

    if (!alpha)
        return false;
Run Code Online (Sandbox Code Playgroud)

如果我调用IsAlpha("abcd", false)该方法似乎总是返回false.我不确定我在三元语句中是否存在逻辑错误,或者我正在尝试做的事情是不可能的.基本上只是想知道是否有可能使IF语句根据allowSpaces值来评估两个表达式中的一个.但相反,我认为它只是评估if (!allowSpace)并在那里返回虚假.

Raw*_*ing 5

没有什么可以阻止你在某种if情况下使用三元- 但是!在你的三元之前只应用三元而(allowSpaces)不是三元的结果.(这是因为一元运算符的优先级高于三元运算符,或者是有条件的).

您需要括起来,以便!适用于条件的结果:

if (!(allowSpaces ? (char.IsLetter(c) || c.Equals(' ')) : char.IsLetter(c)))
Run Code Online (Sandbox Code Playgroud)

放弃三元组可能更清楚:

if (!char.IsLetter(c) && !(allowSpaces && c.Equals(' ')))
Run Code Online (Sandbox Code Playgroud)