NTypewriter icon indicating copy to clipboard operation
NTypewriter copied to clipboard

Generic class with itself as argument of base type equality problem

Open Xriuk opened this issue 1 year ago • 3 comments

Hello, I don't know if I'm missing something here (about your library or Roslyn), but until know I had compared all class types by equality:

classType1 = // some code which returns IClass

classType2 = // some other code which returns IClass

if classType1 == classType2
    }} same {{
end

However if I have a class like this in C#:

public class Base<T>{}

public class Derived : Base<Derived>{}

This does not work:

classType = // some code which returns IClass = Derived

if classType.BaseType.IsGeneric && classType.BaseType.TypeArguments[0] == classType
    }} same {{
end

So apparently Derived and its parent generic argument Derived are different types, why?

Xriuk avatar Jun 05 '24 13:06 Xriuk

It is on NTypewriter side, the equality operator is not overridden, so standard reference comparison is used, and since an instance of object representing a given type is not cached, the results are exactly as you described.

NeVeSpl avatar Jun 05 '24 13:06 NeVeSpl

Oh, so types are not cached like System.Type? Is there an alternative to compare two given types?

Xriuk avatar Jun 05 '24 16:06 Xriuk

They are not, probably only by using their FullName right now.

NeVeSpl avatar Jun 06 '24 12:06 NeVeSpl