Implementierung von IConvertible.GetTypeCode

9

Ich bin pingelig, ich weiß. Aber bei der Implementierung der IConvertible-Schnittstelle für eine Struktur, die nur einen booleschen Wert enthält (und somit nur zwei Zustände hat), was ist der empfohlene Wert, der von IConvertible.GetTypeCode() zurückgegeben wird? Die Struktur ist implizit konvertierbar und vergleichbar mit Boolean und in fast jedem Aspekt außer String- und XML-Darstellung ist es effektiv ein Boolescher Wert.

Ich habe das Gefühl, dass ich den Rahmen belüge, wenn ich TypeCode.Boolean zurückgebe, aber TypeCode.Object scheint unnötig vage zu sein. Gibt es reale Konsequenzen für die Implementierung dieser Methode in Ihren eigenen Strukturen?

IConvertible.GetTypeCode in MSDN

    
Josh 17.08.2009, 16:13
quelle

2 Antworten

3
___ antwort1288998 ___

Sie können das tun - aber seien Sie vorsichtig.

Viele Routinen verwenden GetTypeCode direkt, und dies kann Auswirkungen haben, wenn Ihre Struktur an eine von ihnen übergeben wird. Wenn Sie GetTypeCode überschreiben, um TypeCode.Boolean zurückzugeben, nehmen diese Routinen an, dass Ihre Struktur eine Bool ist, die ungerade Nebenwirkungen haben kann oder nicht.

In der Praxis überprüfen die meisten Beispiele (wie die IsNumeric-Routine von VB) nach numerischen Typen, so dass ein booler TypeCode dies wahrscheinlich nicht beeinflusst, aber es gibt andere Fälle, in denen dies Auswirkungen haben kann. Einige ORMs überprüfen beispielsweise den Typcode, um das Speichern und Laden eines Typs zu behandeln. Wenn Sie möchten, dass Ihre Struktur die Welt zu der Annahme verleitet, dass es ein Bool ist, kann es vielleicht weniger offensichtlich machen, dass Ihr Typ kein Boolescher Typ ist ... aber es kann auch subtile Probleme verursachen.

    
___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ antwort1288954 ___

Basierend auf der Beschreibung für TypeCode.Boolean stellt es "einen einfachen Typ dar, der boolesche Werte von true oder false darstellt." Das klingt, als ob es mit der Beschreibung Ihrer Struktur übereinstimmt, da Sie sagten, dass es nur einen booleschen Wert enthält und zwischen diesen implizit konvertierbar ist.

    
___ qstnhdr ___ Implementierung von IConvertible.GetTypeCode ___ qstntxt ___

Ich bin pingelig, ich weiß. Aber bei der Implementierung der IConvertible-Schnittstelle für eine Struktur, die nur einen booleschen Wert enthält (und somit nur zwei Zustände hat), was ist der empfohlene Wert, der von %code% zurückgegeben wird? Die Struktur ist implizit konvertierbar und vergleichbar mit Boolean und in fast jedem Aspekt außer String- und XML-Darstellung ist es effektiv ein Boolescher Wert.

Ich habe das Gefühl, dass ich den Rahmen belüge, wenn ich %code% zurückgebe, aber %code% scheint unnötig vage zu sein. Gibt es reale Konsequenzen für die Implementierung dieser Methode in Ihren eigenen Strukturen?

IConvertible.GetTypeCode in MSDN

    
___
Reed Copsey 17.08.2009, 16:25
quelle
1
___ antwort1288998 ___

Sie können das tun - aber seien Sie vorsichtig.

Viele Routinen verwenden GetTypeCode direkt, und dies kann Auswirkungen haben, wenn Ihre Struktur an eine von ihnen übergeben wird. Wenn Sie GetTypeCode überschreiben, um TypeCode.Boolean zurückzugeben, nehmen diese Routinen an, dass Ihre Struktur eine Bool ist, die ungerade Nebenwirkungen haben kann oder nicht.

In der Praxis überprüfen die meisten Beispiele (wie die IsNumeric-Routine von VB) nach numerischen Typen, so dass ein booler TypeCode dies wahrscheinlich nicht beeinflusst, aber es gibt andere Fälle, in denen dies Auswirkungen haben kann. Einige ORMs überprüfen beispielsweise den Typcode, um das Speichern und Laden eines Typs zu behandeln. Wenn Sie möchten, dass Ihre Struktur die Welt zu der Annahme verleitet, dass es ein Bool ist, kann es vielleicht weniger offensichtlich machen, dass Ihr Typ kein Boolescher Typ ist ... aber es kann auch subtile Probleme verursachen.

    
___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ antwort1288954 ___

Basierend auf der Beschreibung für TypeCode.Boolean stellt es "einen einfachen Typ dar, der boolesche Werte von true oder false darstellt." Das klingt, als ob es mit der Beschreibung Ihrer Struktur übereinstimmt, da Sie sagten, dass es nur einen booleschen Wert enthält und zwischen diesen implizit konvertierbar ist.

    
___ qstnhdr ___ Implementierung von IConvertible.GetTypeCode ___ qstntxt ___

Ich bin pingelig, ich weiß. Aber bei der Implementierung der IConvertible-Schnittstelle für eine Struktur, die nur einen booleschen Wert enthält (und somit nur zwei Zustände hat), was ist der empfohlene Wert, der von %code% zurückgegeben wird? Die Struktur ist implizit konvertierbar und vergleichbar mit Boolean und in fast jedem Aspekt außer String- und XML-Darstellung ist es effektiv ein Boolescher Wert.

Ich habe das Gefühl, dass ich den Rahmen belüge, wenn ich %code% zurückgebe, aber %code% scheint unnötig vage zu sein. Gibt es reale Konsequenzen für die Implementierung dieser Methode in Ihren eigenen Strukturen?

IConvertible.GetTypeCode in MSDN

    
___
Scott Dorman 17.08.2009 16:18
quelle

Tags und Links