2012-12-10 33 views
6

我想将c#块转换为vb。c#到vb.net convsersion

我使用developerfusion.com上的服务来进行转换,但是当我将它粘贴到Visual Studio中时,它正在抱怨“Key”语句(“在对象初始值设定项中初始化的字段或属性的名称必须启动与'。'“)。

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

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

这里是c#到vb.net。

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

谢谢!

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 _ 
})) 

回答

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/

+2

+1链接http://converter.telerik.com/ –

+2

只需使用'Select'而不是'[Select]'。 – sloth

+0

@DominicKexel - 是的,你是对的:)编辑。 – Darren

5

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

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

C#“只是做它”,VB.NET为您提供了灵活性来定义在平等中使用哪些属性。由于C#使用了所有的属性,所以转换器会给你Key,这样等式的工作方式是一样的。

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

该转换器似乎错误地认为您使用的是匿名类型,但您不是。您的类型为carTruckCombo,因此Key修饰符不起作用。删除Key修饰符将解决问题,因为您有一个定义良好的类,您可以在其中实现您的平等。

+2

很好的解释。 – sloth

+1

这是最好的答案,因为它实际上解释了问题所属的转换问题和语言元素。 – pseudocoder