Typvergleich
-
Hallöle,
da bin ich schon wieder.
Diesmal mit einem fehlgeschlagenen Typenvergleich:Folgender Code in meiner DummyLibrary.dll:
namespace W { public class A { } public class B: A { } public class C: B { } public class D { } }
Und so sieht meine Konsolenanwendung aus:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using W; namespace DummyConsole { class Entry { static public bool IsMySubclassOf( Type derivedType, Type baseType ) { bool result = false; Type testType = derivedType; while( testType != null ) { if( testType.GUID == baseType.GUID ) { result = true; break; } testType = testType.BaseType; } return ( result ); } static void Main() { // Edit: Das hatte gefehlt!!! Console.WriteLine( new A().GetType().IsSubclassOf( typeof( A ) ) ); // Edit: Ende Console.WriteLine( new B().GetType().IsSubclassOf( typeof( A ) ) ); Console.WriteLine( new C().GetType().IsSubclassOf( typeof( A ) ) ); Console.WriteLine( new D().GetType().IsSubclassOf( typeof( A ) ) ); Console.WriteLine( "---" ); Assembly asm = Assembly.ReflectionOnlyLoadFrom( "C:/src/DummyLibrary/bin/Debug/DummyLibrary.dll" ); Type[] types = asm.GetTypes(); foreach( Type item in types ) { Console.WriteLine( "{0}/{1}", item.IsSubclassOf( typeof( A ) ), IsMySubclassOf( item, typeof( A ) ) ); } Console.ReadLine(); } } }
Die Aussgabe ist
False
True
True
False
---
False/True
False/True
False/True
False/FalseDer erste Abschnitt ist wie erwartet. Im 2. Abschnitt ist nur die rechte Seite wie erwartet.
Kann mir einer erklären warum die Vergleiche im 2. Abschnitt mit IsSubClassOf() schiefgehen?
-
Anstatt
new Class().GetType
nimmtypeof(Class)
.Außerdem könntest du bitte den richigen Quelltext veröffendlichen? (Drei Console.WriteLine's ergeben keine 4 Einträge vor '---')
Sonst kannst du auch Type.IsAssignableFrom versuchen.
P.S.: Leicht Off-Topic: Schreibst du an einem Reflector?
-
Hallöle,
Rhombicosidodecahedron schrieb:
Anstatt
new Class().GetType
nimmtypeof(Class)
.Werde ich testen.
Rhombicosidodecahedron schrieb:
Außerdem könntest du bitte den richigen Quelltext veröffendlichen? (Drei Console.WriteLine's ergeben keine 4 Einträge vor '---')
Sry, hatte während dem Posten noch ein
Console.WriteLine( new A().GetType().IsSubclassOf( typeof( A ) ) );
vor den anderen 3 eingefügt, damit es zur foreach()-Schleife paßt.
Rhombicosidodecahedron schrieb:
Sonst kannst du auch Type.IsAssignableFrom versuchen.
Das habe ich schon probiert, das geht auch nicht.
Rhombicosidodecahedron schrieb:
P.S.: Leicht Off-Topic: Schreibst du an einem Reflector?
Jein :D. Ich schreibe eine DataContract-Generator für WCF. Dazu extrahiere ich Infos aus dem Fachlayer per Reflection.