2

我有一个IF条件,

IF (this.Something.GID == 1)
{
Something = "something";
}

除了 1 之外,我还想再添加一个选项,我想说

IF (this.Something.GID **is 1 or 2**)
{
Something = "something";
}

我该如何在 C# 中做到这一点?

4

5 回答 5

7

您可以使用数组和Contains

var items = new int[] {1, 2};
if(items.Contains(this.something.GID))
{
}

如果您在本地执行代码(没有转换为 SQL 的 O/R LINQ),aHashSet可能在大量数据上执行得更好:

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支持类型,例如intor string,那么您应该使用 Marc 的方法switch

关于使用Contains

正如我在评论中所读到的,进一步解释我的代码可能会有所帮助。基本上,代码以相反的方式解决了您的问题:而不是检查 if a is either bc 或者 d它检查集合是否{b, c, d} 包含 a(这是等效的)。

在数组和HashSet

数组和 aHashSet是对这个问题有用的两种不同的实现。通常,您可以比在数组中HashSet 更快地找到元素。

数组执行线性搜索,它遍历每个元素并检查它是否是想要的元素(努力与数组的长度成线性关系)。AHashSet也存储在数组中的元素。但是,当您搜索一个元素时,它会从想要的元素中计算出一个整数散列,并检查其内部数组中的单个元素是否是想要的元素(不断努力hash % array_length

您可以查看Hash table上的 Wikipedia articla 以了解更多详细信息(相当多的阅读,但非常有趣)。

于 2012-11-13T15:15:09.330 回答
3

你可以使用这样的开关

switch (this.Something.GID)
{
   case 1:
   case 2:
   case 3: 
      Something = "something";
  break;
}
于 2012-11-13T15:14:35.473 回答
2
if (this.Something.GID == 1 || this.Something.GID == 2 )
{
 Something = "something";
}

最好从一些 C# 初学者书籍/教程开始。

于 2012-11-13T15:14:51.427 回答
1

您可以在此使用||&&

if ((this.Something.GID == 1) || (this.Something.GID == 2))
{
     Something = "something";
}
于 2012-11-13T15:13:40.500 回答
0
if( (new int[]{1, 2, 3, 4}).Any(x => x == 3) )
{
    Something = "...";
于 2012-11-13T15:22:57.063 回答