2015-11-11 2 views
0

У меня есть свойства списка, которые должны содержать как pivot1, так и pivot2.Содержит два значения?

Как я могу сделать Содержит работу с BOTH значениями?

List<string> properties = line.Split('|').ToList(); 
string pivot1 = "value1"; 
string pivot2 = "value2"; 

if(properties.Contains(pivot1) && properties.Contains(pivot2)) 
{ 
// do stuff. 

} 
+4

http://stackoverflow.com/questions/1520642/does-net-have-a-way-to-check -f-list-a-contains-all-items-in-list-b – CodeCaster

+3

Что не так с кодом, который вы дали? – CompuChip

+0

Что именно вы спрашиваете? Поскольку ваш оператор 'if' ** делает ** уже проверяет, содержит ли' свойства' как 'pivot1', так и' pivot2'. Дело только в том, что оно выкинет «NullReferenceException», как сейчас, потому что «свойства» объявлены, но не инициализированы. – ZiNNED

ответ

1

Помимо написания метода расширения/помощника, вы можете использовать LINQ, чтобы сократить его немного:

if (new[] { pivot1, pivot2 }.All(properties.Contains)) 
{ 

} 

Хотя это несколько менее читаемым я бы поспорил.


Мне лично нравится поддерживать класс Utility, чтобы создать свою собственную полезную инфраструктуру для комплимента .NET. Я хотел бы сделать что-то вроде:

public static bool ContainsAll<T>(this IEnumerable<T> list, params T[] items) 
{ 
    foreach(var item in items) 
    { 
     if (!list.Contains(item)) 
      return false; 
    } 

    return true; 
} 

, то вы можете использовать:

if(properties.ContainsAll(pivot1, pivot2)) 
{ 

} 
+0

Это элегантное решение, но я получаю ошибку: Тяжесть \t \t Код Описание \t \t Project File \t Line Ошибка \t \t CS1106 метод расширения должен быть определен в не -генеричный статический класс. – ryokan

+0

Методы расширения должны быть в статическом классе. То есть public static class Utilities ... – Jonesopolis

0

Вы не инициализируете свойства или ничего не добавляете к нему.

List<string> properties = new List<string>(); 

properties.Add("value1"); 
properties.Add("value2"); 

string pivot1 = "value1"; 
string pivot2 = "value2"; 

if(properties.Contains(pivot1) && properties.Contains(pivot2)) 
{ 
    // do stuff. 
} 
+2

не думаю, что это точка вопроса на всех – Jonesopolis

Смежные вопросы