6

私はc#のブロックをvbに変換しようとしています。

私はdeveloperfusion.comのサービスを使用して変換を行いましたが、それをVisual Studioに貼り付けると、「Key」ステートメント(「オブジェクト初期化子で初期化されるフィールドまたはプロパティの名前は「。」で始まる必要があります」について不平を言っています。 ")。

私はそれを回避するために数時間コードをいじりましたが、私がしたことはすべてより多くのエラーにつながりました。

それで、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すべてを提供し、平等は同じように機能します。

OK、これがKey修飾子の裏話です。変換の何が問題になっていますか?

コンバーターは、匿名タイプを使用していると誤って想定しているようですが、そうではありません。あなたのタイプは、修飾子が機能しないcarTruckComboようになっています。Key修飾子を削除するKeyと、同等性を実装できる明確に定義されたクラスがあるため、問題が修正されます。

于 2012-12-10T15:45:59.740 に答える