C#如果条件带有值检查
我正在为包含多个表达式的C#如果条件带有值检查,c#,if-statement,C#,If Statement,我正在为包含多个表达式的if条件寻找简短的编码样式 假设我想在字符串变量名str中添加if条件。 这是我的if条件 if(str == "a" || str == "b" || str == "c" || str == "d") 我想让这个如果条件短一些类似的东西 if(str == "a" || "b" || "c" || "d") 或 我不必一次又一次地输入str== 我知道,我可以通过多种方式做到这一点: 使用switch语句 制作字符串数组/列表并使用LINQ或Contains进行
if
条件寻找简短的编码样式
假设我想在字符串变量名str
中添加if
条件。
这是我的if
条件
if(str == "a" || str == "b" || str == "c" || str == "d")
我想让这个如果条件短一些类似的东西
if(str == "a" || "b" || "c" || "d")
或
我不必一次又一次地输入str==
我知道,我可以通过多种方式做到这一点:
- 使用switch语句
- 制作字符串数组/列表并使用LINQ或Contains进行检查
我想做一些类似于if(str==“a”| |“b”| |“c”| |“d”)
或if(str在{“a”、“b”、“c”、“d”)中)
谢谢你的帮助 没有此类语法可用。这是对您的要求的简单回答
或
你可以遵循德米特里·拜琴科在评论中的建议
if (new [] {"a", "b", "c", "b"}.Contains(str)) { ... }
查看这些以了解更多详细信息:
您不能这样做。
通常在语句中检查布尔类型
所以
if(str==“a”)
检查str==“a”
并基于str
的值返回true
或false
但是当你在做
if(str==“a”| |“b”| |“c”| |“d”)
如果((str==“a”)| |(“b”)| |(“c”)| |(“d”)
在本指令中,第一部分返回布尔值,但其他部分不返回布尔值,这对if
语句无效
同样的,你也不能跟着做
int a = 5, b = 6, c = 7;
if(a == b == c) //This is not valid statement
{
}
就在这里
((a==b)==c)
,和(a==b)
结果为true
或false
。所以在第二部分,检查将是
(true/false==c)
,此处无法将布尔值与int值进行比较,也无法提供布尔值结果
我想做一些类似于if(str==“a”| | |“b”| |“c”| |“d”)或if(str在{“a”、“b”、“c”、“d”)中)
正如我们所看到的,如果(str==“a”| |“b”| |“c”| |“d”)
,我们就不能执行
但是,如果您有权拥有一个包含所有字符串元素的字符串列表
。您需要创建一个类级别(全局)列表并签入,如果条件允许,您可以执行以下操作
假设元素列表
就是这样的列表
if(listofements.Contains(str))
根据@Dai,该解决方案在每次调用时都会导致额外的堆分配(对于数组),这会影响紧循环场景中的性能。@Saadi:当然,但将其提取到静态变量中非常容易,所以它只分配一次。@Saadi如果值是固定的,则可以在类级别声明该数组,如果值来自服务或数据库,则可以在类中一次性初始化该数组。这样就不会在每次通话中都有任何分配。在你问这个问题之前,仔细想想。这不是什么大问题。现在,所有的PC/笔记本电脑都有很好的内存,而您提出的问题不是企业级应用程序,您需要处理很多事情。希望你明白我的意思。谁和为什么被否决?我真的很想知道原因。它发现它没有取消否决票。给我一个合理的理由,写代码是一回事。以后维护和阅读它是另一回事。我更喜欢让事情易于理解和可读。与新数组相比,我更喜欢使用多个str
。(我没有投反对票)
int a = 5, b = 6, c = 7;
if(a == b == c) //This is not valid statement
{
}