Ich habe eine Erweiterungsmethode, die ich seit Jahren in WinForms verwendet habe, aber nicht, seit ich versucht habe, es in einem neuen WPF-Projekt zu verwenden. Die Methode:Wie kann ich diese InvalidCastException vermeiden?
Der erste Chunk (der auskommentiert ist) ist die ursprüngliche Methode. Der zweite Teil ist eine etwas andere Version, mit der ich getestet habe. Wenn ich die Rückleitung mit der Besetzung Kraft auszuführen, erhalte ich diese Ausnahme:
Der vollständige Wortlaut der Ausnahme von diesem Dialog:
Zusätzliche Informationen: [A] System .ComponentModel.DescriptionAttribute kann nicht in [B] System.ComponentModel.DescriptionAttribute umgewandelt werden. Typ A stammt von 'System.ComponentModel.Primitives, Version = 4.1.1.0, Culture = Neutral, PublicKeyToken = b03f5f7f11d50a3a' im Kontext 'Default' am Speicherort 'C: \ TFS_Local \ Antero \ AnteroWPF \ bin \ Debug \ System.ComponentModel .Primitives.dll '. Typ B stammt von 'System, Version = 4.0.0.0, Culture = Neutral, PublicKeyToken = b77a5c561934e089' im Kontext 'Standard' am Speicherort 'C: \ WINDOWS \ Microsoft.Net \ assembly \ GAC_MSIL \ System \ v4.0_4.0.0 .0__b77a5c561934e089 \ System.dll '.
die beiden Anordnungen scheinen beteiligt zu sein:
System.ComponentModel.Primitives.dll
(existiert in der Build-Verzeichnis bin ... nicht ganz sicher, wie es dort ankam)
System.dll
(direkt von GAC verwiesen, aus offensichtlichen Gründe)
Ich bin hier völlig verloren. Wenn ich das ComponentModel DLL entferne, wird das die Ausnahme. Auch wenn die Ausnahme behauptet, dass System
vom Typ ist, scheint keine Verwendung davon möglich. I.e. System.ComponentModel.DescriptionAttribute
scheint keine gültige Sache in Ermangelung der entsprechenden DLL zu tun.
Also, wenn ich eins entferne und das scheitert, und das andere ist vollständig unbrauchbar ... dann warum ist diese Ausnahme überhaupt aufgetreten ?!
EDIT: Ich denke, es lohnt sich nichts, wenn ich den Wert attributes
im Speicher überprüfen, sehe ich, dass das Array ein einzelnes Element hat, und es ist vom Typ System.ComponentModel.DescriptionAttribute
.
Die Linie mit den Darstellern – DonBoitnott
Es funktioniert gut für mich: https://github.com/heldersepu/csharp-proj/commit/c80e3e9828cb08c11cd17031fa10e6a4852878da#diff-225b67798e354b1ad8b608f72aa1ded5 – HelderSepu
@HelderSepu Während Ihr Beispiel tatsächlich unvollständig ist (Ihre Enum-Werte tun keine beschreibenden Attribute haben), es funktioniert übrigens in dieser vereinfachten Form. Leider macht mir das den Unterschied nicht klar. – DonBoitnott