我正在做一个小例子来了解from in select
。
我的例子:
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
this.Name = name;
this.Age = age;
}
}
class Program
{
static void Main()
{
var list = new List<Person>();
list.Add(new Person(name: "Hermione", age: 20));
var persons = from p in list select new { p.Age, p.Name };
foreach (var person in persons)
{
Console.WriteLine($"Name: {person.Name}. Age: {person.Age}");
}
var _persons = from p in list select new Person(p.Name, p.Age);
foreach (var person in _persons)
{
Console.WriteLine($"Name: {person.Name}. Age: {person.Age}");
}
}
}
他们两个都有相同的结果:
姓名:赫敏。年龄:20
我的问题:第一个和第二个之间有什么区别?什么时候使用第一个/第二个?
答案 0 :(得分:3)
var persons = from p in list select new { p.Age, p.Name };
- 创建匿名类型
var _persons = from p in list select new Person(p.Name, p.Age);
- 创建人
根据https://msdn.microsoft.com/en-us/library/bb397696.aspx
匿名类型通常用在查询的select子句中 表达式从中返回每个对象的属性子集 源序列。
匿名类型包含一个或多个公共只读属性。没有 其他类成员(例如方法或事件)是有效的。 用于初始化属性的表达式不能为null, 匿名函数或指针类型。
匿名类型是直接从object派生的类类型 不能转换为除object之外的任何类型。
答案 1 :(得分:3)
首先,这里是匿名类型var persons = from p in list select new { p.Age, p.Name };
所以你可以制作属性的随机名称,例如
var persons = from p in list select new { AgesSomeWithDay = p.Age , FullName = p.Name + p.Name };
但是 var _persons = from p in list select new Person( p.Name, p.Age);
是强类型的,您不能创建随机命名属性,因为这里是new Person
和Person
类包含两个属性,您只能分配给_persons