检查值是否为C#中一组值之一的最简单方法?

检查值是否为C#中一组值之一的最简单方法?,c#,.net,list,enums,set,C#,.net,List,Enums,Set,检查一个值是否为一组值之一的最简单方法是什么 例如 if(新列表{CustomerType.Overseas,CustomerType.Interstate}.Contains(CustomerType)) { //代码在这里 } 您可以循环它,看看它是否有效。把你们想要的东西做成一个数组,然后使用for循环并比较它们 CustomerType[] customers = {new CustomerType("Overseas"), new CustomerType("Interstate")}

检查一个值是否为一组值之一的最简单方法是什么

例如

if(新列表{CustomerType.Overseas,CustomerType.Interstate}.Contains(CustomerType))
{
//代码在这里
}

您可以循环它,看看它是否有效。把你们想要的东西做成一个数组,然后使用for循环并比较它们

CustomerType[] customers = {new CustomerType("Overseas"), new CustomerType("Interstate")};
public CustomerType(int id, String type){
this.type = type;
}
public String getType(){return type;}
然后你可以扫描这些类型

for(int i = 0; i < CustomerTypes.customers.length; i++){
if(CustomerTypes.customers[i].getType == "Overseas"){
//CODE
}
else if(CustomerTypes.customers[i].getType == "Interstate"){
//CODE
}else{
//CODE "UNKNOWN CUSTOMER TYPE"
}
}
for(int i=0;i

我很确定这就是你的要求。但如果没有,请澄清,我将很高兴给予更多的帮助

你可以循环它,看看它是否有效。把你们想要的东西做成一个数组,然后使用for循环并比较它们

CustomerType[] customers = {new CustomerType("Overseas"), new CustomerType("Interstate")};
public CustomerType(int id, String type){
this.type = type;
}
public String getType(){return type;}
然后你可以扫描这些类型

for(int i = 0; i < CustomerTypes.customers.length; i++){
if(CustomerTypes.customers[i].getType == "Overseas"){
//CODE
}
else if(CustomerTypes.customers[i].getType == "Interstate"){
//CODE
}else{
//CODE "UNKNOWN CUSTOMER TYPE"
}
}
for(int i=0;i

我很确定这就是你的要求。但如果没有,请澄清,我将很高兴给予更多的帮助

为什么要创建列表?
为什么每次都要创建它

HashSet是最快的

private HashSet<CustomerType> CustomerTypes = new HashSet<CustomerType>() {CustomerType.Overseas, CustomerType.Interstate};
if (CustomerTypes.Contains(customerType))
{ }
如果要多次求值,则HashSet将获胜。
在应用程序开始时创建一次哈希集。
不要每次都创建哈希集(或列表或数组)

对于较小的数字,一个列表或数组可能会赢,但包含的是O(n),所以响应将随着更长的列表而降低


HashSet.Contains是O(1),所以响应不会随n的增大而降低。

为什么要创建列表?
为什么每次都要创建它

HashSet是最快的

private HashSet<CustomerType> CustomerTypes = new HashSet<CustomerType>() {CustomerType.Overseas, CustomerType.Interstate};
if (CustomerTypes.Contains(customerType))
{ }
如果要多次求值,则HashSet将获胜。
在应用程序开始时创建一次哈希集。
不要每次都创建哈希集(或列表或数组)

对于较小的数字,一个列表或数组可能会赢,但包含的是O(n),所以响应将随着更长的列表而降低


HashSet.Contains是O(1),因此响应不会随n的增大而降低。

不是答案:比较
HashSet
列表
中包含的
-TL;博士首选-
HashSet

猜测:
List
更简单,因此对于少量项目,它应该比
HashSet
快,因此使用
newlist{EnumType.Value1,EnumType.Value2}
HashSet
的代码一样好


现实:
包含
列表
比人们预期的要慢得多(与直接迭代
数组
相比,后者比
哈希集
多达10项),太长了,读不下去了,所以代码< >清单>代码>当代码中的任意个项目为0-2或第一选择时,列表< <代码> >比其他选项小得多(不是答案:<代码> HasStuts<代码> vs>代码>列表<代码> > < <代码> > tl;DR;首选<代码> HasStuts< /C> > /< 猜测:
List
更简单,因此对于少量项目,它应该比
HashSet
快,因此使用
newlist{EnumType.Value1,EnumType.Value2}
HashSet
的代码一样好


现实:
包含
用于
列表的
比人们预期的要慢得多(与直接迭代
数组
相比,后者比
哈希集
多达10项),因此
列表
可以击败
哈希集
,当项目数为0-2或
列表中的首选项
比其他非常小的选项更常见时(你可以考虑<代码> HasSET 而不是<代码>列表<代码>,但是你的样本有什么错?@ GravtWiNeN:有一个较短的方法吗?@ GravtWiNy:是的,有一个更快的方法。HashSet是一个更快的集合。@ BLAM在验证了我的计时<代码>列表>代码>之后比我最初测量的慢得多,所以<代码>列表 几乎无法与0-2项(代码发布在下面)的哈希集相匹配所以,<代码> HasSET 是更好的选择。像往常一样,永远不要猜测性能数字……谢谢好玩。@ GalthTunnNee两个列表和HASSET都包含了不是LINQ扩展的方法。它们不使用系统。LINQ;您可以考虑<代码> HasStuts<代码>而不是<代码>列表< /C> >,但是您的示例有什么问题?@ GravtTunnNi:I有没有更短的方法?@GrantWinney是的,有更快的方法。HashSet是包含的更快的集合。@在验证我的计时
List
后,结果比我最初测量的慢得多,因此
List
几乎无法与
HashSet
进行0-2项的匹配(下面发布的代码)所以,<代码> Hash SET 是更好的选择。像往常一样,永远不要猜测性能数字……谢谢好玩。@ GalthTunnNee两个列表和HASSET都包含了不是LINQ扩展的方法。它们不使用系统。LINQ;+ 1。考虑从答案中删除问题并将它们转换成语句…@ AlxeILnkkvof使用哈希的部分内容。集合和代码示例并不是一个明确的回答语句?我今天非常不清楚……我的意思是:“为什么要创建列表?”->“使用HashSet,因为它是为此类操作而明确设计的…”“为什么每次都要创建它?”->“除非您需要在一个地方/一次进行比较,否则最好是…”+ 1。考虑将问题从答案中删除,并把它们转换成语句……AlxeILVENKOOF HASSET和代码样例的哪些部分不是一个清晰的回答语句?我今天还不清楚……我的意思是:“为什么要创建一个列表?”->“使用哈希集,因为它是为这些操作而明确设计的……”“为什么会这样?”
Size:   List:   HashSet(ms):
0,      120,    155
1,      163,    194
2,      203,    189
3,      250,    189
4,      294,    188
5,      332,    188