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# 是类型的属性,MyHelperClassgetHelperClass(a#) 返回所述类的实例。

现在,我有一个奇怪的地方,h1 的赋值语句完美。没问题。但是,h2 的赋值语句给了我以下蓝色曲线错误:

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

我根本没有收到这个错误!我什至不知道从哪里开始解决这个问题。帮助!

201105.06 0305: h1 类型的签名是List(Of myLib.Address),其中Address是一个非常基本的类,具有典型的地址字段(姓名、地址、城市、州、邮编等)。的返回类型getHelperClass也是List(Of myLib.Address).

正如 SSS 在他的回答中暗示的那样,如果我将它用于没有运算符的类的相等性测试,我希望=不会以“自然”方式工作,但是我将它用作赋值运算符,而不是相等,我可以看不出有什么问题。我期望将结果getHelperClass分配给 h2。但相反,它告诉我=没有为该类型定义。是否有可能由于某种原因,编译器将其解释为=(EQUALS)而不是=(ASSIGN)

至于评论那条线并且它发生在第一条线上,我需要等到明天我回到办公室才能检查。会回来汇报的。

4

2 回答 2

3

啊,是的,抱歉没有正确阅读您的OP。作业必须被误解为比较。也许你错过了一个逗号?例如,在语句“a = b = c”中,第一个等号是赋值,第二个是比较。

于 2011-05-10T06:27:49.093 回答
1

您需要将 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

您还应该阅读参考和值类型之间的区别。

于 2011-05-06T05:35:32.203 回答