2013-01-21 52 views
17

在VB.NET我已經習慣了這樣搞創建匿名類型(VB.NET anonymous types include the notion of Key Fields)時:如何在C#匿名類型中聲明「Key」字段?

Dim prod1 = New With { 
    Key .Name = "paperclips", 
    Key .Price = 1.29, 
    .OnHand = 423 
} 

但是,我一直沒能找到在C#這樣做的任何方式,因爲它出現Key關鍵字不受支持。

有沒有什麼辦法可以在C#中表示我只想比較匿名類型中的一些字段時尋找平等?

+3

我總是很驚訝C#和VB之間的小差異。我當然不知道你能做到這一點是VB。 – svick

回答

17

在C#中沒有這樣的東西。 In C#,匿名類型的所有屬性都是隻讀的並且參與相等比較。

如果你想在C#中做這樣的事情,你需要創建自己的(named)類型。

+3

擴展一點:MSDN說自動生成的'Equals'和'GetHashCode'實現使用匿名類型的每個屬性。他們使用每種類型的屬性來調用他們的'Equals'和'GetHashCode'的實現。 –

+1

C#中不存在這樣一個方便的功能。這可能不值得,但我創建了一個[建議](http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3572724-c-feature-request-key-fields-in-anonymous-鍵入)在用戶發言論壇上進行功能請求。 – Daniel

+1

這是否意味着,C#中的匿名類型的每個屬性都與VB.NET Key屬性相同? – TheEvilPenguin

3

在c#中沒有關鍵的等價物。