我有一个可以为空的类型,例如SomeEnum?
和一组值,例如IEnumerable<SomeEnum?>
。
如何使用LINQ检查所有项目是否具有相同的值(并获取此值)?
答案 0 :(得分:15)
data.Distinct().Count() == 1;
效果也不错。
答案 1 :(得分:9)
public static bool AllEqual<T>(this IEnumerable<T?> values) where T : struct
{
if (!values.Any()) return true;
T? first = values.First();
return values.Skip(1).All(v => first.Equals(v));
}
编辑:要获得该值,您可以返回一个元组(成功,值),如下所示:
public Tuple<bool, T?> AllEqual<T>(IEnumerable<T?> values) where T : struct
{
if(! values.Any()) return Tuple.Create(true, (T?)null);
T? first = values.First();
bool equal = values.Skip(1).All(v => v.Equals(first));
return Tuple.Create(equal, equal ? first : (T?)null);
}
或者您可以使用out参数:
public static bool AllEqual<T>(this IEnumerable<T?> values, out T? value) where T : struct
{
value = null;
if (!values.Any()) return true;
T? first = values.First();
value = first;
return values.Skip(1).All(v => first.Equals(v));
}
答案 2 :(得分:5)
var value = data.Distinct().Single();
(如果没有一个唯一值,则抛出异常,否则返回该值)
如果您不想要例外:
var few=data.Distinct().Take(2).ToList();
if(few.Count==1) {
var value = few[0];
...
}
答案 3 :(得分:3)
Lazy并为空序列返回true:
public function actionIndex($productcustomurl)
{
//Now, you can find a product by its custom url, and pass the finded product object to the view
}