Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在IF语句中可以使用三元表达式吗? 我只是在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; }_C#_.net - Fatal编程技术网

C# 在IF语句中可以使用三元表达式吗? 我只是在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; }

C# 在IF语句中可以使用三元表达式吗? 我只是在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; },c#,.net,C#,.net,基本上我只是想缩短这个时间 alpha = (allowSpaces) ? (char.IsLetter(c) || c.Equals(' ')) : char.IsLetter(c); if (!alpha) return false; 如果我调用IsAlpha(“abcd”,false)该方法似乎总是返回false。我不确定三元语句中是否有逻辑错误,或者我试图做的是不可能的。基本上只是想知道是否有可能让if语句根据allowSpaces的值计算两个表达式中

基本上我只是想缩短这个时间

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

    if (!alpha)
        return false;

如果我调用
IsAlpha(“abcd”,false)
该方法似乎总是返回false。我不确定三元语句中是否有逻辑错误,或者我试图做的是不可能的。基本上只是想知道是否有可能让if语句根据
allowSpaces
的值计算两个表达式中的一个。但是相反,我认为它只是计算
if(!allowSpace)
并在那里返回false。

没有什么可以阻止您在
if
条件中使用三元-但是
之前,三元值仅应用于
(allowSpaces)
,而不是三元值的结果。(这是因为一元运算符的值高于三元运算符或条件运算符)

您需要插入括号,以便
应用于条件的结果:

if (!(allowSpaces ? (char.IsLetter(c) || c.Equals(' ')) : char.IsLetter(c)))
可能更清楚的是放弃三元:

if (!char.IsLetter(c) && !(allowSpaces && c.Equals(' ')))

没有什么能阻止您在
if
条件中使用三元-但是
之前,三元值仅应用于
(allowSpaces)
,而不是三元值的结果。(这是因为一元运算符的值高于三元运算符或条件运算符)

您需要插入括号,以便
应用于条件的结果:

if (!(allowSpaces ? (char.IsLetter(c) || c.Equals(' ')) : char.IsLetter(c)))
可能更清楚的是放弃三元:

if (!char.IsLetter(c) && !(allowSpaces && c.Equals(' ')))

当扩展如此简单和清晰时,为什么还要担心压缩呢

if(char.IsLetter(c)) return true; if(allowSpace && c.Equals(' '))return true; return false; 它甚至读起来和你想做的完全一样。 您的有效案例是“字母”和“空白,如果明确允许”

通过避免术语的合并,每个条件甚至都针对源代码管理进行了优化。可能没有什么理由更改alpha检查的逻辑,但是如果您要使用业务规则来执行验证,那么这些规则中的每一条都可以轻松地独立维护

从性能的角度来看,我们甚至对字母进行了优化,测试仅在首次发现字符不是字母时执行合取逻辑

如果您死心塌地地想将其压缩成一行,并删除
continue
s,则将这两个验证测试中的每一个的否定结合起来,作为您的检查门
返回false
,但如果您需要在验证检查中添加第三、第四或第五项,您几乎必须修改结构以使其易读

foreach(var c in value) { if(!char.IsLetter(c) && !(allowSpace && c.Equals(' ')) return false; } foreach(价值中的var c) { if(!char.isleter(c)&&!(allowSpace&&c.Equals(“”))返回false; }
当扩展如此简单和清晰时,为什么还要担心压缩呢

if(char.IsLetter(c)) return true; if(allowSpace && c.Equals(' '))return true; return false; 它甚至读起来和你想做的完全一样。 您的有效案例是“字母”和“空白,如果明确允许”

通过避免术语的合并,每个条件甚至都针对源代码管理进行了优化。几乎没有理由更改alpha检查的逻辑,但是如果要使用业务规则来执行验证,则可以轻松地独立维护这些规则

从性能的角度来看,我们甚至对字母进行了优化,测试仅在首次发现字符不是字母时执行合取逻辑

如果您死心塌地地想将其压缩成一行,并删除
continue
s,那么将这两个验证测试中的每一个的否定结合起来,因为您的gate around
返回false
,但是如果您需要在验证检查中添加第三、第四或第五项,您几乎必须修改结构的易读性

foreach(var c in value) { if(!char.IsLetter(c) && !(allowSpace && c.Equals(' ')) return false; } foreach(价值中的var c) { if(!char.isleter(c)&&!(allowSpace&&c.Equals(“”))返回false; }
这是可能的,但很令人困惑。你最好使用普通的布尔逻辑。你的逻辑在这两种选择之间不是倒退了吗?@EdCottrell这是公平的,我同意。我只是利用这段时间来学习什么是可能的,不一定是什么是最具可读性的。我可能会把它作为后者,我只是好奇前者是不是可行。@TimSchmelter,因为在只计算字符串中的第一个字符后,如果
alpha==true
,我不希望函数结束。@KirkWoll是的,你是对的。今天早上太累了。但是对于
“abc”的测试用例
这两种方式都不重要。这是可能的,但很容易混淆。你最好使用普通的布尔逻辑。你的逻辑不是在两种选择之间倒转吗?@EdCottrell这是公平的,我同意。我只是利用这段时间来了解什么是可能的,不一定是最可读的。我可能会把它作为拿铁r、 我只是好奇前者是否可行。@TimSchmelter因为如果在只计算字符串中的第一个字符后,
alpha==true
,我不希望函数结束。@KirkWoll是的,你是对的。今天早上太累了。但是对于
的测试用例“abc”
这两种方式都不重要。为了回答你的第一个问题,我的问题的目的只是“什么是可能的?”而不是“什么是最好的?”这与效率或“将一个函数的纳秒数减少”无关但这纯粹是好奇。那个么,三元当然是可能的。但要知道,您重复了您的
char.isleter(c)规范
通过跳入跳出可选条件进行检查。无论如何,三元代码不会改进原始代码。正如我所说的。使用我发布的方法,它不起作用。我不知道这是因为我有一个逻辑错误(毕竟我们都犯了错误),还是根本不可能。就这么简单。作为(希望)有用的建议,我