Generic class with itself as argument of base type equality problem
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?
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.
Oh, so types are not cached like System.Type? Is there an alternative to compare two given types?
They are not, probably only by using their FullName right now.