我有一个IF条件,
IF (this.Something.GID == 1)
{
Something = "something";
}
我想再添加一个选项,而不是1,我想说
IF (this.Something.GID **is 1 or 2**)
{
Something = "something";
}
我该如何在C#中做到这一点?
您可以使用数组和Contains
:
var items = new int[] {1, 2};
if(items.Contains(this.something.GID))
{
}
如果您在本地执行代码(没有转换为SQL的O/R LINQ),HashSet
可能在大量数据上表现更好:
var items = new HashSet<int>();
items.Add(1);
items.Add(2);
// equivalent one-liner, thanks to Eren
// var items = new HashSet<int> { 1, 2 }
if(items.Contains(this.something.GID))
{
}
如果您在编译时了解所有元素,并且它们是支持switch
的类型,如int
或string
,那么您应该使用Marc的switch
方法。
关于使用Contains
正如我在评论中所读到的,进一步解释我的代码可能会有所帮助。基本上,该代码以另一种方式解决您的问题:与其检查a
是b
、c
还是d
,不如检查集合{b, c, d}
是否包含a
(相当于)。
阵列和HashSet
数组和HashSet
是两种不同的实现方式,对这个问题很有用。通常,在HashSet
中查找元素的速度要比在数组中快。
数组执行线性搜索,即在每个元素上迭代,并检查它是否是所需元素(工作量与数组长度成线性)。HashSet
也将元素存储在数组中。但是,当您搜索元素时,它会从所需元素中计算出整数哈希,并检查内部数组中hash % array_length
处的单个元素是否为所需元素(常量努力)。
您可以查看哈希表上的维基百科文章以了解更多详细信息(阅读量很大,但非常有趣)。
您可以使用开关像这样:
switch (this.Something.GID)
{
case 1:
case 2:
case 3:
Something = "something";
break;
}
if (this.Something.GID == 1 || this.Something.GID == 2 )
{
Something = "something";
}
最好从一些C#初学者的书/教程开始。
您可以在此使用||
和&&
。
if ((this.Something.GID == 1) || (this.Something.GID == 2))
{
Something = "something";
}
if( (new int[]{1, 2, 3, 4}).Any(x => x == 3) )
{
Something = "...";