2012-12-10 7 views
6

Próbuję przekonwertować blok C# do vb.C# do vb.net convsersion

Do konwersji użyłem usługi na developerfusion.com, ale kiedy wkleję ją do Visual Studio, to narzeka na instrukcje "Key" ("Nazwa pola lub właściwości inicjowanej w inicjalizatorze obiektu musi się zaczynać z '.' ").

Grałem z kodem przez kilka godzin próbując ominąć to, ale wszystko, co zrobiłem, spowodowało tylko więcej błędów.

Więc zacząłem się zastanawiać, czy konwersja na developerfusion była zawsze poprawna.

Tutaj jest C# do vb.net.

Nie jestem pewien, skąd pochodzi "klucz" i zastanawiałem się, czy ktoś mógłby mnie oświecić.

Dzięki!

Od

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

Aby

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

Odpowiedz

7

Zdjąć Key

to zrobić w zamian:

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

Jako marginesie, ten konwerter zawsze wor ked lepiej dla mnie, gdy potrzebowałem go:

http://converter.telerik.com/

+2

+1 dla linku http://converter.telerik.com/ –

+2

Po prostu użyj 'Wybierz' zamiast' [Wybierz] '. – sloth

+0

@DominicKexel - tak, masz rację :) Edytowane. – Darren

5

W języku C#, podczas tworzenia typ anonimowy, generuje implementację używasz wszystkie właściwości swojego anonimowego typu Equals i GetHashCode.

VB.NET robi coś podobnego, ale wymaga umieszczenia Key modifier na właściwościach twojego anonimowego typu.

C# "po prostu robi to", gdzie VB.NET zapewnia elastyczność w definiowaniu właściwości używanych w równości. Ponieważ C# używa wszystkich właściwości, konwerter daje ci Key na wszystko, więc równość działa tak samo.

OK, więc to jest archiwum modyfikatora Key, więc co jest nie tak z konwersją?

Konwerter wydaje się niepoprawnie założyć, że używasz anonimowego typu, ale tak nie jest. Twój typ to carTruckCombo, więc modyfikatory Key nie działają. Usunięcie modyfikatora Key rozwiązałoby problem, ponieważ masz dobrze zdefiniowaną klasę, w której możesz wprowadzić tam swoją równość.

+2

ładne wyjaśnienie. – sloth

+1

To jest najlepsza odpowiedź, ponieważ w rzeczywistości wyjaśnia problem konwersji i element języka, którego dotyczy pytanie. – pseudocoder