我只是在工作中用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)并在那里返回虚假.
没有什么可以阻止你在某种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)