4

さて、私はここで完全に混乱しています。私はクラスを持っています...言うMyClass。私のタイプの別のクラスのいくつかのプロパティがありますMyHelperClass(他のプロパティとともに)。

私は次のことをしています:

Dim inst As MyClass = New MyClass() With {
    .p1 = sv1, 
    .p2 = sv2, 
    .h1 = getHelperClass(a1), 
    .p3 = sv3, 
    .p4 = sv4, 
    .h2 = getHelperClass(a2), 
    .p5 = sv5, 
    ...
    .pN = svN
}

*ここで、.p# はプロパティ、.sv# は有効な値です。.h# は型のプロパティでMyHelperClassあり、 getHelperClass(a#) はそのクラスのインスタンスを返します。

ここで、h1 の割り当てステートメントが完璧に機能するという奇妙な点があります。問題はありません。ただし、h2 の割り当てステートメントでは、次の青い波線のエラーが表示されます。

Operator '=' is not defined for types myLib.MyHelperClass and myLib.MyHelperClass.

このエラーはまったく発生しません。これを理解するためにどこから始めればよいかさえわかりません。ヘルプ!

201105.06 0305: h1 の型の署名は ですList(Of myLib.Address)。ここで、Addressは典型的な住所フィールド (名前、住所、都市、州、郵便番号など) を持つ非常に基本的なクラスです。の戻り値の型getHelperClassList(Of myLib.Address)です。

=SSSが彼の答えで示唆したように、演算子のないクラスの等価テストに使用している場合、「自然な」方法で動作しないと予想されますが、等価ではなく代入演算子として使用しています。問題はありません。getHelperClassの結果がh2 に割り当てられることを期待しています。しかし、代わりに=、 が型に対して定義されていないことがわかります。何らかの理由で、コンパイラがそれを=(EQUALS)代わりに解釈している可能性はあり=(ASSIGN)ますか?

その行をコメントアウトし、最初の行でそれが起こっていることについては、明日オフィスに戻って確認するまで待つ必要があります。報告します。

4

2 に答える 2

3

ああ、ええ、申し訳ありませんが、OP を適切に読みませんでした。代入は比較として誤解されているに違いありません。多分あなたはコンマを逃していますか?たとえば、ステートメント "a = b = c" では、最初の等号は代入で、2 番目は比較です。

于 2011-05-10T06:27:49.093 に答える
1

MyHelperClassにOperatorメソッドを追加する必要があります

例えば

Public Shared Operator =(byval a as MyHelperClass, byval b as MyHelperClass) As Boolean
...
End Operator

Public Shared Operator <>(byval a as MyHelperClass, byval b as MyHelperClass) As Boolean
...
End Operator

また、参照型と値型の違いについても読む必要があります。

于 2011-05-06T05:35:32.203 に答える