Подтвердить что ты не робот

Python 'in' оператор, эквивалентный С#

С Python я могу использовать оператор "in" для операции установки следующим образом:

x = ['a','b','c']
if 'a' in x:
  do something

Что эквивалентно в С#?

4b9b3361

Ответ 1

Большинство коллекций объявляют метод Contains (например, через интерфейс ICollection<T>), но всегда существует более универсальный LINQ Enumerable.Contains:

char[] x = { 'a', 'b', 'c' };

if(x.Contains('a'))
{
   ...    
}

Если вы думаете, что "неправильный путь", вы можете написать расширение, которое исправляет вещи:

public static bool In<T>(this T item, IEnumerable<T> sequence)
{
   if(sequence == null)
      throw new ArgumentNullException("sequence");

   return sequence.Contains(item);    
}

И используйте его как:

char[] x = { 'a', 'b', 'c' };

if('a'.In(x))
{
   ...    
}

Ответ 2

Чтобы построить на Ani ответ, оператор Python in для словарей является эквивалентом ContainsKey в С#, поэтому вам понадобятся два метода расширения:

public static bool In<T, V>(this T item, IDictionary<T, V> sequence)
{
    if (sequence == null) throw new ArgumentNullException("sequence");
    return sequence.ContainsKey(item);
}

public static bool In<T>(this T item, IEnumerable<T> sequence)
{
    if (sequence == null) throw new ArgumentNullException("sequence");
    return sequence.Contains(item);
}