Enumerable.Single方法,返回集合中唯一的一条记录,如果记录数不等于1就报错。
Enumerable.SingleOrDefault方法,返回集合中唯一的一条记录,如果记录数大于1报错,如果记录数等于0,则返回默认值。对于引用类型和可空类型的数据,这个默认值就是null。
有时候返回的这个null不是很方便,可以通过扩展方法,扩展一个SingleOrNew方法。
具体代码如下:
- class Program
- {
- static void Main(string[] args)
- {
- List<test> l = new List<test>(){
- new test(),
- new test()
- };
- var o1 = l.SingleOrNew<test>(m => m.a == 0);//匹配2个,异常
- var o2 = l.SingleOrNew<test>(m => m.a == 70);//匹配0个,返回new test()
- }
- }
- class test
- {
- public int a;
- public string s;
- }
- static class Extension
- {
- public static T SingleOrNew<T>(this IEnumerable<T> query) where T : new()
- {
- if (query.Count() == 0)
- {
- return new T();
- }
- return query.Single();
- }
- public static T SingleOrNew<T>(this IEnumerable<T> query, Func<T, bool> predicate) where T : new()
- {
- if (query.Count(predicate) == 0)
- {
- return new T();
- }
- return query.Single(predicate);
- }
- }
本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/1001731,如需转载请自行联系原作者