1、AsEnumeralbe操作符
AsEnumerable
操作符可以将一个类型为IEnumerable<T>
的输入序列转换成一个IEnumerable<T>
的输出序列,其主要用于将一个实现了IEnumerable<T>
接口的对象转换成一个标准的IEnumerable<T>
接口对象。在Linq中、不同领域的Linq实现都有自己专属的操作符。
如IQueryable<T>
通常是Linq to SQL的返回类型,当我们直接在上面调用Where<T>
方法时,调用的是Linq to sql的扩展方法,因此有时候我们需要转换为标准的IEnumerable<T>
才能调用Linq to OBJECT的扩展方法。
2、DefaultEmpty操作符
DefaultEmpty
操作符可以用来为一个空的输入序列生成一个对应的含有默认元素的新序列。引用类型为null
,值类型为相应的默认值。有些标准操作符在一个空的序列上调用时会抛出一个异常,而DefaultEmpty
恰恰可以解决这个问题。
例如,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
List<string> ListInt = new List<string>();
ListInt.Add("C");
ListInt.Add("Java");
ListInt.Add("Python");
string str = ListInt.Where(s => s.StartsWith("JavaScript")).DefaultIfEmpty().First();
Console.WriteLine("str="+str); //输出空白
//使用string str1 = ListInt.Where(s => s.StartsWith("JavaScript")).First(); 如去掉DefaultEmpty就会报异常
Console.ReadKey();
}
}
}
3、Empty操作符
Empty
操作符用于生成一个包含指定类型元素的空序列。
例如,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
IEnumerable<int> ints = Enumerable.Empty<int>();
Console.WriteLine(ints.Count()); //输出0
Console.ReadKey();
}
}
}