VB.NET: Оператор '=' не определен ... для переменной и объекта ЖЕ ТИПА? - PullRequest
4 голосов
/ 06 мая 2011

Хорошо, я полностью запутался здесь.У меня есть класс ... скажем 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.

Я просто не получаю эту ошибку вообще!Я даже не знаю, где начать выяснять это.HELP!

201105.06 0305: Подпись для типа h1: List(Of myLib.Address), где Address - базовый класс с типичными адресными полями (имя, адрес, город, штат, zip)., так далее.).Тип возврата getHelperClass также List(Of myLib.Address).

Как намекал SSS в своем ответе, я ожидал бы, что = не будет работать "естественным" образом, если бы я использовал его для проверки на равенство в классе без операторов, однако я использую его какоператор присваивания, а не равенство, с которым я не вижу проблем.Я ожидаю, что результат getHelperClass будет присвоен h2.Но вместо этого он говорит мне, = не определен для типа.Возможно ли, что по какой-то причине компилятор интерпретирует его как =(EQUALS) вместо =(ASSIGN)?

Что касается комментирования этой строки и того, что происходит в первой, мне нужно подождать, пока я не вернусь в офис завтра, чтобы проверить это.Отзовусь.

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

Ах, да, извините, не прочитал ваш ОП должным образом. Назначение должно быть неправильно истолковано как сравнение. Может быть, вам не хватает запятой? Например, в выражении «a = b = c» первый знак равенства - это присвоение, второй - сравнение.

1 голос
/ 06 мая 2011

Вам необходимо добавить методы Operator в MyHelperClass

например,

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

Вы также должны прочитать разницу между типами Reference и Value.

...