C# Python';s';在';等价于C的算子#

C# Python';s';在';等价于C的算子#,c#,python,operators,C#,Python,Operators,对于Python,我可以使用“in”运算符进行如下设置操作: x = ['a','b','c'] if 'a' in x: do something C#中的等价物是什么?大多数集合声明包含方法(例如,通过ICollection接口),但通常有更通用的LINQ方法: 如果您认为这是“错误的方法”,您可以编写一个扩展来纠正问题: public static bool In<T>(this T item, IEnumerable<T> sequence) { if

对于Python,我可以使用“in”运算符进行如下设置操作:

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

C#中的等价物是什么?

大多数集合声明
包含
方法(例如,通过
ICollection
接口),但通常有更通用的LINQ方法:

如果您认为这是“错误的方法”,您可以编写一个扩展来纠正问题:

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

   return sequence.Contains(item);    
}
要基于的答案,Python在
字典运算符中的
相当于C#中的
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);
}
公共静态bool-In(此T项,IDictionary序列)
{
如果(sequence==null)抛出新的ArgumentNullException(“sequence”);
返回顺序。ContainsKey(项目);
}
公共静态布尔输入(此T项,IEnumerable序列)
{
如果(sequence==null)抛出新的ArgumentNullException(“sequence”);
返回顺序。包含(项目);
}

我不知道确切的语法,但是我打赌你可以用LINQ来做。这不是一个集合操作,因为那是一个列表而不是集合。如果
x
是一个字典,那么
sequence==null
为什么会引发异常呢false@David海夫南:这是一个选择,但是在.NET中,容器类型的
null
引用通常用于表示容器本身不存在,而不是空容器。如果我们假设这个惯例;第二个参数为null确实是一个错误。@Ani公平地说,我对.net约定知之甚少。有人想知道,如果
sequence==null
不是有效的输入,为什么不让代码前进到
sequence.Contains
。@David:Python的
in
运算符会对
None
序列抛出异常,因此这是预期的行为。
char[] x = { 'a', 'b', 'c' };

if('a'.In(x))
{
   ...    
}
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);
}