2012-12-10 11 views
6

Ich versuche, einen Block von C# zu vb zu konvertieren.C# zu vb.net convsersion

Ich habe den Dienst bei developerfusion.com verwendet, um die Konvertierung durchzuführen, aber wenn ich es in Visual Studio einfügen, beschwert es sich über die "Key" -Anweisungen ("Name des Felds oder Eigenschaft initialisiert in einem Objekt Initialisierer muss starten mit '.' ").

Ich spielte ein paar Stunden mit dem Code herum und versuchte, das zu umgehen, aber alles, was ich tat, führte nur zu mehr Fehlern.

So begann ich mich zu fragen, ob die Konvertierung bei developerfusion jemals richtig war.

Hier ist die C# zu vb.net.

Ich bin mir nicht sicher, woher "Key" kommt und fragte mich, ob jemand mich erleuchten könnte.

Danke!

Von

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

Um

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

Antwort

7

Entfernen Sie die Key

diese stattdessen tun:

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

Als Randbemerkung, diesen Konverter immer wor ked für mich besser, wenn ich es nötig war:

http://converter.telerik.com/

+2

+1 für den Link http://converter.telerik.com/ –

+2

Verwenden Sie einfach 'Select' anstelle von' [Select] '. – sloth

+0

@DominicKexel - yep, du hast Recht :) Bearbeitet. – Darren

5

In C#, wenn eine anonyme Art zu schaffen, es erzeugt eine Equals und GetHashCode Implementierung für Sie alle Eigenschaften Ihres anonymen Typs.

VB.NET tut etwas ähnliches, aber Sie müssen die Key modifier auf die Eigenschaften Ihres anonymen Typs setzen.

C# "tut es einfach" wo VB.NET gibt Ihnen die Flexibilität zu definieren, welche Eigenschaften in der Gleichheit verwendet werden. Da C# alle Eigenschaften verwendet, gibt der Konverter Ihnen Key auf alles, also funktioniert Gleichheit das selbe.

OK, das ist also die Hintergrundgeschichte des Key Modifier, also was ist falsch mit Ihrer Konvertierung?

Der Konverter scheint fälschlicherweise anzunehmen, dass Sie einen anonymen Typ verwenden, aber Sie sind es nicht. Ihr Typ ist carTruckCombo, so dass sie Key Modifikatoren nicht funktionieren. Das Entfernen des Key Modifikators würde das Problem beheben, da Sie eine gut definierte Klasse haben, in der Sie Ihre Gleichheit dort implementieren können.

+2

nette Erklärung. – sloth

+1

Dies ist die beste Antwort, da es das Konvertierungsproblem und das Sprachelement, auf das sich die Frage bezieht, tatsächlich erklärt. – pseudocoder