在Python中,我可以使用“in”运算符进行集合操作,如下所示:
x = ['a','b','c']
if 'a' in x:
do something
在C#中等价的是什么?
大多数集合声明了一个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))
{
...
}
x
是一个字典,则使用 ContainsKey
。 - Gabenull
引用通常用于表示容器本身的不存在而不是空容器。如果我们假设这个约定;第二个参数为null确实是一个错误。 - Anisequence.Contains
呢? - David Heffernanin
运算符对于None
序列会抛出异常,因此这是预期行为。 - GabeIn<T>
方法的阅读方式,感觉有些奇怪。 - user47589在 Ani 的回答基础上,Python 中字典使用的 in
运算符相当于 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);
}