T-SQL的歧义性



我有一个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的类型,如intstring,那么您应该使用Marc的switch方法。

关于使用Contains

正如我在评论中所读到的,进一步解释我的代码可能会有所帮助。基本上,该代码以另一种方式解决您的问题:与其检查abc还是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 = "...";

相关内容

  • 没有找到相关文章

最新更新