您的位置:首页 > 编程学习 > ASP.NET > 正文

.NET中First,FirstOrDefault,Single,SingleOrDefault的区别

更多 时间:2015-10-30 类别:编程学习 浏览量:3307

.NET中First,FirstOrDefault,Single,SingleOrDefault的区别

.NET中First,FirstOrDefault,Single,SingleOrDefault的区别

一、First

取序列中满足条件的第一个元素,如果没有元素满足条件,则抛出异常 

 

二、FirstOrDefault

取序列中满足条件的第一个元素,如果没有元素满足条件,则返回默认值(对于可以为null的对象,默认值为null,对于不能为null的对象,如int,默认值为0)

 

三、Single

返回序列中的唯一一条记录,如果没有或返回多条,则引发异常。

 

四、SingleOrDefault

返回序列中的唯一一条记录,如果序列中不包含任何记录,则返回默认值,如果返回多条,则引发异常。 

 

五、使用场合

1、当确信序列中一定有满足条件的元素时,使用First方法,取到元素后,无需判断是否为null 
2、当序列中可能找不到满足条件的元素时,使用FirstOrDefault方法,然后,一定要对返回值是否为null,进行不同的处理

 

六、实例

 

  •  
  • C# 代码   复制
  • 
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace SingleOrDefaultDemo
    {
      class Program
      {
        static void Main(string[] args)
        {
          var lst = new List<int> { 10, 20, 100, 30, 60, 50, 80 };
    
          //输出结果:10
          Console.WriteLine("First:{0}", lst.First());
    
          //输出结果:10
          Console.WriteLine("FirstOrDefault:{0}", lst.FirstOrDefault());
    
          //输出结果:100(注:因为这里的First是按List<int>的索引来取第一个符合条件的元素,所以结果是100,而不是按从小到大的顺序)
          Console.WriteLine("First:{0}", lst.First(x => x > 30));
          //输出结果:100(同上First)
          Console.WriteLine("FirstOrDefault:{0}", lst.FirstOrDefault(x => x > 30));
    
          // 抛出异常:序列包含一个以上的元素
          //Console.WriteLine("Single:{0}", lst.Single());
    
          // 抛出异常:序列包含一个以上的元素
          //Console.WriteLine("SingleOrDefault:{0}", lst.SingleOrDefault());
    
          //抛出异常:序列不包含任何匹配元素
          //Console.WriteLine("Single:{0}", lst.Single(x => x > 100));
    
          //输出结果:0
          Console.WriteLine("SingleOrDefault:{0}", lst.SingleOrDefault(x => x > 100));
    
          Console.WriteLine("Press any key to quit...");
          Console.ReadKey();
        }
      }
    }
    
    		
  •  

    标签:linq