Ben*_*enM 5 c# vb.net anonymous-types
我正在摸不着头脑,因为我无法理解为什么会发生以下情况:
'//VB.NET
Dim product1 = New With {.Name = "paperclips", .Price = 1.29}
Dim product2 = New With {.Name = "paperclips", .Price = 1.29}
'compare product1 and product2 and you get false returned.
Dim product3 = New With {Key .Name = "paperclips", Key .Price = 1.29}
Dim product4 = New With {Key .Name = "paperclips", Key .Price = 1.29}
'compare product3 and product4 and you get true returned.
'//C#
var product5 = new {Name = "paperclips", Price = 1.29};
var product6 = new {Name = "paperclips", Price = 1.29};
//compare products 5 and 6 and you get true.
Run Code Online (Sandbox Code Playgroud)
产品1和2发生了什么,使它们不像产品5和6那样?
在C#中,匿名类型的所有属性都表现得好像它们Key在VB中具有修饰符:属性是只读的,它们包含在相等和哈希代码评估中.
在VB中,没有性能Key改性剂是可变的,并且不在使用Equals/ GetHashCode实施方式.
从匿名类型定义文档:
如果匿名类型声明至少包含一个关键属性,类型定义覆盖三名成员来自继承
Object:Equals,GetHashCode,和ToString.如果未声明任何键属性,则仅ToString重写.覆盖提供以下功能:
Equals如果两个匿名类型实例是同一个实例,或者它们满足以下条件,则返回True:
- 它们具有相同数量的属性.
- 属性以相同的顺序声明,具有相同的名称和相同的推断类型.名称比较不区分大小写.
- 至少有一个属性是键属性,Key关键字应用于相同的属性.
- 每对相应键属性的比较返回True.
GetHashcode提供适当独特的GetHashCode算法.该算法仅使用密钥属性来计算哈希码.ToString返回一串连接的属性值,如以下示例所示.包括密钥和非密钥属性.
| 归档时间: |
|
| 查看次数: |
941 次 |
| 最近记录: |