4

好的,我完全糊涂在这里。我有班...说MyClass。它有我类型的另一个类的几个属性,如MyHelperClass(以及其他属性)。VB.NET:运算符'='未定义...对于同一类型的变量和对象?

我做了以下内容:

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是典型的地址字段(名称,地址,城市,州,邮政编码等),一个非常基本的类。返还类型getHelperClass也是List(Of myLib.Address)

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

至于评论这一行,它发生在第一个,我需要等到明天我回到办公室来检查。将回报。

+0

你可以发布'MyClass'字段'h1'的签名吗? – JaredPar 2011-05-05 22:01:21

+0

这篇文章有助于我们更好地诊断问题。你能为我们提供一些MyHelperClass的代码吗?另外,如果你注释掉.h2行,那么应用程序是编译还是执行它,然后将错误传递给前面的赋值? – IAmTimCorey 2011-05-05 22:02:21

+0

更新了一些更多信息。 – eidylon 2011-05-06 13:46:32

回答

3

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

1

您需要将运算符方法添加到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 

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

+0

这是有道理的,......除了h1的赋值工作正常,没有任何错误,而h2并不是完全相同的完全相同的类型。这是真正引发我的。我知道'=(EQUALS)'不同于引用类型的值。但是我没有使用'=(EQUALS)',我正在使用'=(ASSIGN)'(true,VB可能不清楚,使用'=',不像'='与'= C = =')。 – eidylon 2011-05-06 07:04:19

+1

啊,是的,抱歉,没有正确地读你的OP。必须将作业误解为作业。也许你错过了一个逗号?例如在声明“a = b = c”中,第一个等号是一个赋值,第二个是比较。 – SSS 2011-05-06 07:31:02

+0

是的,错过了两套关门pa子。在这种情况下,它并没有给我平常的蓝色曲线。啊,疯狂的编译器。如果你想发表你的评论作为答案,我会接受并给你代表。 – eidylon 2011-05-06 16:18:33

相关问题