[英]Why do my anonymous types not work in Clay when using VB.Net but do work in C#
[英]How do VB.NET anonymous types without key fields differ from C# anonymous types when compared?
我正在摸不着頭腦,因為我無法理解為什么會發生以下情況:
'//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.
產品1和2發生了什么,使它們不像產品5和6那樣?
在C#中,匿名類型的所有屬性都表現得好像它們在VB中具有Key
修飾符:屬性是只讀的,並且它們包含在相等和散列碼評估中。
在VB中,沒有Key
修飾符的屬性是可變的,並且不在 Equals
/ GetHashCode
實現中使用。
從匿名類型定義文檔 :
如果匿名類型聲明包含至少一個鍵屬性,則類型定義將覆蓋從
Object
繼承的三個成員:Equals
,GetHashCode
和ToString
。 如果未聲明任何鍵屬性,則僅覆蓋ToString
。 覆蓋提供以下功能:
如果兩個匿名類型實例是同一個實例,或者它們滿足以下條件,則
Equals
返回True:
- 它們具有相同數量的屬性。
- 屬性以相同的順序聲明,具有相同的名稱和相同的推斷類型。 名稱比較不區分大小寫。
- 至少有一個屬性是鍵屬性,Key關鍵字應用於相同的屬性。
- 每對相應鍵屬性的比較返回True。
GetHashcode
提供了一個適當的唯一GetHashCode
算法。 該算法僅使用密鑰屬性來計算哈希碼。ToString
返回一串連接屬性值,如以下示例所示。 包括密鑰和非密鑰屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.