C# 需要更好的方法将多个值与属性进行比较并返回true;

C# 需要更好的方法将多个值与属性进行比较并返回true;,c#,string,compare,C#,String,Compare,我正在寻找一种标准/最佳实践,用于需要对照返回true的值列表检查对象的相同属性(如果任何值与属性匹配)的场景 目前代码类似于此(我没有编写它,我正在寻找重构它) IEnumerable items=新列表{“string1”、“string2”}; bool match=items.Contains(object.property); 您可以将值放入列表中,然后执行以下操作: List<string> values = new List<string>() {"stri

我正在寻找一种标准/最佳实践,用于需要对照返回true的值列表检查对象的相同属性(如果任何值与属性匹配)的场景

目前代码类似于此(我没有编写它,我正在寻找重构它)

IEnumerable items=新列表{“string1”、“string2”};
bool match=items.Contains(object.property);

您可以将值放入
列表中,然后执行以下操作:

List<string> values = new List<string>() {"string1", "string2"};

if(values.Contains(object.Property)) return true;
List values=newlist(){“string1”、“string2”};
if(values.Contains(object.Property))返回true;

其他答案建议使用
列表
,但
哈希集
更适合此任务:

HashSet<string> set = new HashSet<string>() { "string1", "string2", ..., "string15" }; 

if (set.Contains(object.Property))
    //... do something ...

您可以尝试LINQ以获得更简洁的代码,例如:

bool match = new string[] { "string1", "string2" }.Any(p => p == object.property);

如果你有常量字符串,那么就使用
开关盒
构造。所有答案都是有效的,而且比我提供的要好得多。干得好,伙计们。我将投票给Andrew,因为它看起来是可读性最好的,并且应该分配最少的内存量,因为它使用的是字符串数组。再次非常感谢您的回答。HashSet将是一个更好的解决方案。O(1)代替O(n)。。。假设您重用HashSet,而不是每次都构建它。只要确保重用HashSet,否则将不会比List有任何性能优势。如果HashSet已经计算过,它可能比一个巨大的switch语句更快(对于较大的数据集尤其如此)。@Mark完全正确,感谢您指出这一点。示例代码中的
newfoo()
构造经常导致代码效率低下或错误
new Random()
就是一个常见的例子。@Matthew我不太了解编译器如何处理带字符串的switch语句,但对于整数开关,它可以使用跳转表。字符串开关可能也有一些优化。然而,我自己没有时间编译和分解一个例子。由于许多原因,我投了反对票。其中最重要的不是使用“Count()>0”而不是Any();在object.property周围有引号。这显然不是你的意思。另外,为了更简洁,新的[]{“string1”,“string2”}怎么样。这里不需要“字符串”,它是可以推断出来的。完成。非常好的关于字符串可以推断的事实。我从来没想过。是的,我不是指关于obj.prop的引用。
HashSet<string> set = new HashSet<string>() { "string1", "string2", ..., "string15" }; 

if (set.Contains(object.Property))
    //... do something ...
switch (object.property)
{
    case "string1":
    case "string2":
    //...
    case "string15":
       //... do something ...
       break;
}
bool match = new string[] { "string1", "string2" }.Any(p => p == object.property);