6

我正在尝试将 c# 块转换为 vb。

我使用 developerfusion.com 上的服务进行转换,但是当我将其粘贴到 Visual Studio 中时,它抱怨“键”语句(“在对象初始化程序中初始化的字段或属性的名称必须以'开头。' ”)。

我玩了几个小时的代码试图解决这个问题,但我所做的一切只会导致更多的错误。

所以我开始怀疑 developerfusion 的转换是否正确。

这是 vb.net 的 c#。

我不确定“钥匙”是从哪里来的,想知道是否有人可以启发我。

谢谢!

var combinedResults  = 
cars.Select(c=>new carTruckCombo{ID=c.ID,make=c.make,model=c.model})
.Union(tracks.Select(t=>new carTruckCombo{ID=t.ID,make=t.make,model=t.model}));

Dim combinedResults = cars.[Select](Function(c) New carTruckCombo() With { _
Key .ID = c.ID, _
Key .make = c.make, _
Key .model = c.model _
}).Union(tracks.[Select](Function(t) New carTruckCombo() With { _
Key .ID = t.ID, _
Key .make = t.make, _
Key .model = t.model _
}))
4

2 回答 2

7

去除Key

改为这样做:

    Dim combinedResults = cars.Select(Function(c) New carTruckCombo() With { _
    .ID = c.ID, _
        .make = c.make, _
        .model = c.model _
     }).Union(tracks.Select(Function(t) New carTruckCombo() With { _
        .ID = t.ID, _
        .make = t.make, _
        .model = t.model _
     }))

作为旁注,每当我需要它时,这个转换器总是对我更好:

http://converter.telerik.com/

于 2012-12-10T15:38:33.497 回答
5

在 C# 中,创建匿名类型时,它会使用匿名类型的所有属性为您生成一个Equals和实现。GetHashCode

VB.NET 做了类似的事情,但它要求您将Key修饰符放在匿名类型的属性上。

C#“只是这样做”,其中 VB.NET 使您可以灵活地定义在相等中使用哪些属性。由于 C# 使用了所有属性,因此转换器为您Key提供所有内容,因此相等的工作方式相同。

好的,这就是Key修饰符的背景故事,那么您的转换有什么问题?

转换器似乎错误地假设您使用的是匿名类型,但事实并非如此。您的类型是这样的carTruckCombo,因此它们的Key修饰符不起作用。删除Key修饰符将解决问题,因为您有一个定义明确的类,您可以在那里实现您的相等性。

于 2012-12-10T15:45:59.740 回答