Ich hab hier eine Bibliothek, die ursprünglich native vorliegt und für die passende .NET-Wrapper existieren. Die Wrapper-Klassen stehen zwar als Quellcode zur Verfügung, aber es gilt die Vorgabe, an diesen Quelltexten nichts zu ändern, damit Updates der Bibliothek (samt Updates in diesen mitgelieferten Quelltexten) ohne Nachziehen solcher Änderungen eins zu eins übernommen werden können.
Im ursprünglichen C++-Code dieser Bibliothek wurden für Boolsche Parameter eigene Konstanten namens TRUE und FALSE deklariert (sic), im .NET-Wrapper wurde analog dazu ein eigener Enumtyp namens "Bool" (im Gegensatz zum .NET Werttyp "Boolean" bzw. dem C#-Typ "bool") definiert:
Die zugehörigen Parameter würde ich nun innerhalb meines Programms aber gerne als "echte" Boolean/bool-Werte speichern. Einfach der Übersichtlichkeit und Wartungsfreundlichkeit wegen. Dumm nur, dass die Wrapper-Funktion einen Parameter vom Enum Bool erwartet und nicht Boolean/bool.
Ein erster (und auch funktionierender) Ansatz war, eine Erweiterungsmethode zu schreiben, die die Klasse bool um eine Methode .ToLibBool() (o.ä.) erweitert, die den boolschen Wert in o.g. Enum umwandelt. Sieht aber doof aus, und macht das ganze imho unnötig umständlich.
Also kam ich auf die Idee mit impliziten Operatoren.
Scheint aber nicht so funktionieren wie ich dachte.
Weder das eine oder das andere will mein VS2010 durchgehen lassen.
Variante 1 ergibt den Fehler "Die beste Übereinstimmung für die überladene Lib.IrgendeineFunktion(Lib.Bool)-Methode hat einige ungültige Argumente.".
Variante 2 ergibt den Fehler "Eine Konvertierung vom Typ "bool" in "Lib.Bool" ist nicht möglich."
Wieso "nicht möglich"? Ich hab ihm doch extra den "implicit Operator" zur Verfügung gestellt?
Wo ist der Denkfehler? Wie kriege ich das hin?
Im ursprünglichen C++-Code dieser Bibliothek wurden für Boolsche Parameter eigene Konstanten namens TRUE und FALSE deklariert (sic), im .NET-Wrapper wurde analog dazu ein eigener Enumtyp namens "Bool" (im Gegensatz zum .NET Werttyp "Boolean" bzw. dem C#-Typ "bool") definiert:
Die zugehörigen Parameter würde ich nun innerhalb meines Programms aber gerne als "echte" Boolean/bool-Werte speichern. Einfach der Übersichtlichkeit und Wartungsfreundlichkeit wegen. Dumm nur, dass die Wrapper-Funktion einen Parameter vom Enum Bool erwartet und nicht Boolean/bool.
Ein erster (und auch funktionierender) Ansatz war, eine Erweiterungsmethode zu schreiben, die die Klasse bool um eine Methode .ToLibBool() (o.ä.) erweitert, die den boolschen Wert in o.g. Enum umwandelt. Sieht aber doof aus, und macht das ganze imho unnötig umständlich.
Also kam ich auf die Idee mit impliziten Operatoren.
Scheint aber nicht so funktionieren wie ich dachte.
Weder das eine oder das andere will mein VS2010 durchgehen lassen.
Variante 1 ergibt den Fehler "Die beste Übereinstimmung für die überladene Lib.IrgendeineFunktion(Lib.Bool)-Methode hat einige ungültige Argumente.".
Variante 2 ergibt den Fehler "Eine Konvertierung vom Typ "bool" in "Lib.Bool" ist nicht möglich."
Wieso "nicht möglich"? Ich hab ihm doch extra den "implicit Operator" zur Verfügung gestellt?
Wo ist der Denkfehler? Wie kriege ich das hin?
Weltherrschaft erlangen: 1%
Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
Danke.
Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
Danke.