Problem using '=' with System.Type

J

John

Hi

I have the following code;

ByVal MyType As Type
Dim frame As StackFrame
If frame.GetMethod().DeclaringType = MyType Then

Problem is I am getting the "Operator '=' is not defined for types
'System.Type' and 'System.Type'." error on the last line. How can I fix
this?

Thanks

Regards
 
A

Armin Zingler

Am 23.03.2010 02:27, schrieb John:
Hi

I have the following code;

ByVal MyType As Type
Dim frame As StackFrame
If frame.GetMethod().DeclaringType = MyType Then

Problem is I am getting the "Operator '=' is not defined for types
'System.Type' and 'System.Type'." error on the last line. How can I fix
this?

To compare references, use the 'Is' operator:

If frame.GetMethod().DeclaringType Is MyType
 
G

Göran Andersson

John said:
Hi

I have the following code;

ByVal MyType As Type
Dim frame As StackFrame
If frame.GetMethod().DeclaringType = MyType Then

Problem is I am getting the "Operator '=' is not defined for types
'System.Type' and 'System.Type'." error on the last line. How can I fix
this?

Thanks

Regards

VB has it's own implementation of the = operator, so it doesn't always
work as you might expect.

Use the Equals method to use it's own built in comparison to compare the
types:

If frame.GetMethod().DeclaringType.Equals(MyType) Then
 
G

Göran Andersson

Armin said:
Am 23.03.2010 02:27, schrieb John:

To compare references, use the 'Is' operator:

If frame.GetMethod().DeclaringType Is MyType

The Is operator works for some purposes, but it doesn't do an equality
comparison. For example, (String Is Object) = True, while (Object Is
String) = False.
 
A

Armin Zingler

Am 23.03.2010 09:34, schrieb Göran Andersson:
The Is operator works for some purposes, but it doesn't do an equality
comparison. For example, (String Is Object) = True, while (Object Is
String) = False.

Help me understanding it. :) John wants to check if it's the same System.Type
object, right? So your example with String and Object would be:

dim t1 = gettype(string)
dim t2 = gettype(object)

msgbox (t1 is t2) 'False
msgbox (t2 is t1) 'False

He does not want to check if the type of an object is of a
certain type or derived from that type. But maybe I got it wrong.
 
M

Mark Hurd

The Is operator works for some purposes, but it doesn't do an equality
comparison. For example, (String Is Object) = True, while (Object Is
String) = False.

Could you be thinking of the C# Is operator?
 
G

Göran Andersson

Armin said:
Am 23.03.2010 09:34, schrieb Göran Andersson:

Help me understanding it. :) John wants to check if it's the same System.Type
object, right? So your example with String and Object would be:

dim t1 = gettype(string)
dim t2 = gettype(object)

msgbox (t1 is t2) 'False
msgbox (t2 is t1) 'False

He does not want to check if the type of an object is of a
certain type or derived from that type. But maybe I got it wrong.

No, you are right. I was thinking that the Is operator is comparing the
types, but it is comparing the Type objects.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top