C#学习笔记(三)—–C#高级特性:匿名类型

C#高级特性:匿名类型

  • 匿名类型是由编译器临时创建的用来保存一组值的简单类。可以用new来创建一个匿名类型,并在后面跟上对象初始化器“{}”,在里面指定类型包含的属性名称和值,名值对:
var dude = new { Name = "Bob", Age = 23 };

编译器将这个语句编译成类似于下面的东西:

internal class AnonymousGeneratedTypeName
{
private string name; // Actual field name is irrelevant
private int age; // Actual field name is irrelevant
public AnonymousGeneratedTypeName (string name, int age)
{
this.name = name; this.age = age;
}
public string Name { get { return name; } }
public int Age { get { return age; } }
// The Equals and GetHashCode methods are overridden (see Chapter 6).
// The ToString method is also overridden.
}
...
var dude = new AnonymousGeneratedTypeName ("Bob", 23);

你必须使用var关键字去引用一个匿名类型,因为它没有名字。
匿名类中属性名可以根据表达式中得到,如:

int Age = 23;
var dude = new { Name = "Bob", Age, Age.ToString().Length };

等同于:

var dude = new { Name = "Bob", Age = Age, Length = Age.ToString().Length };

如果在相同的程序集中声明的两个匿名类型具有相同生命顺序和类型和名字的参数,那么认为这两个匿名类型是相同的。

var a1 = new { X = 2, Y = 4 };
var a2 = new { X = 2, Y = 4 };
Console.WriteLine (a1.GetType() == a2.GetType()); // True

此外,Equals方法在匿名类型中被重写了,从而能够执行正确的等于比较运算:

Console.WriteLine (a1 == a2); // False
Console.WriteLine (a1.Equals (a2)); // True

你可以像下面这样创建一个匿名类型的数组:

var dudes = new[]
{
new { Name = "Bob", Age = 30 },
new { Name = "Tom", Age = 40 }
};

匿名类型在c#3.0被引入,主要是为了LINQ这个更大的概念。在linq的学习中,我们将继续介绍这个类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值