首页 > 代码库 > LINQ系列:C#中与LINQ相关特性
LINQ系列:C#中与LINQ相关特性
1. 匿名类型
通过关键字var定义匿名类型,编译器将根据运算符右侧表达式的值来发出一个强类型。
使用匿名类型时要遵守的一些基本规则:
◊ 匿名类型必须有一个初始化值,而且这个值不能是空值(null),因为类型是根据初始化器推断出来的;
◊ 匿名类型可以用于简单类型,也可以用于复杂类型。用于定义简单类型时,其价值不大。复合匿名类型需要有成员声明;
◊ 匿名类型不能用于类的字段;
◊ 匿名类型可以在for循环中用作初始化器;
◊ 可以使用new关键字;数组的初始化器必须使用new关键字;
◊ 匿名类型可以用于数组;
◊ 所有匿名类型都派生自Object类型;
var title = "LINQ to Object";
1.1 复合匿名类型
var product = new { Title = "LINQ to Object", UnitPrice = 10m };
1.2 在for/foreach语句中使用匿名类型
var fibonacci = new int[] { 1, 1, 2, 3, 5, 8, 13, 21 };for (var i = 0; i < fibonacci.Length; i++){ Console.WriteLine(fibonacci[i]);}
var fibonacci = new int[] { 1, 1, 2, 3, 5, 8, 13, 21 };foreach (var number in from f in fibonacci where f > 5 select f){ Console.WriteLine(number);}
1.3 匿名类型与using
using( var connection = new SqlConnection(connectionString)){ connection.Open(); // ......}
2. 数组初始化器
使用关键字new初始化数组。
var fibonacci = new int[]{ 1, 1, 2, 3, 5, 8, 13, 21 };
3. 匿名泛型方法
Func<long, long> Factorial = delegate(long n){ if (n == 1) { return 1; } long result = 1; for (int i = 2; i <= n; i++) { result *= i; } return result;};Console.WriteLine(Factorial(6));
// using System.Diagnostics;Func<long, long> Factorial = delegate(long n){ return n > 1 ? n * (long)(new StackTrace() .GetFrame(0) .GetMethod() .Invoke(null, new object[] { n - 1 })) : n;};Console.WriteLine(Factorial(6));
4. 自动实现属性
public string ProductName { get; set; }
设置只读属性:
public string ProductName { get; private set; }
5.对象和集合初始化器
对象初始化器:在不调用类的构造函数以声明性方式创建一个新的对象,并设置该对象的各个属性的值。
Product product = new Product{ ProductID = 1, ProductName = "LINQ to Object", UnitPrice = 10m};
集合初始化器用来初始化一个集合。
List<Product> products = new List<Product> { new Product { ProductID = 1, ProductName = "LINQ to Object", UnitPrice = 10m }, new Product { ProductID = 2, ProductName = "LINQ to ADO.NET", UnitPrice = 20m }};
LINQ系列:C#中与LINQ相关特性
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。