2013-01-21 48 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#中没有关键的等价物。