1

我有一个字符串列表,并且想使用单行 Linq 来返回列表的唯一值(如果有)或 null,否则。换句话说:

 ["a","a","a","a","a"] returns "a"
 ["a"] returns "a"

 ["a","a","a","a","b"] returns null
 ["a","b","c"] returns null
 [] returns null

我假设我会使用 IEnumerable.Distinct() 将列表折叠为其唯一值,但我不知道如何执行“单或空”(如果有多个项目,SingleOrDefault() 会引发异常;FirstOrDefault( ) 将始终返回第一项,如果有两个或更多我想要的,则不会返回 null。)

有任何想法吗?我真的很好奇是否有一种简单的方法可以在我忽略的一行中做到这一点。如果您不必编写扩展方法来使其工作,则可以加分。谢谢!

4

2 回答 2

3
col.Distinct().Count() == 1? col.First() : null;
于 2013-10-09T21:44:04.410 回答
1

这行吗?

 col.Distinct().Count() > 1 ? null : col.Distinct().First();

更新以处理空集合

 col.Count() == 0 ? null : col.Distinct().Count() > 1 ? null : col.Distinct().First();
于 2013-10-09T21:42:58.880 回答