Wenn wir zwei Strukturen haben, und eine implizit in die andere konvertierbar ist, dann scheint es, dass die System.Nullable<>
Versionen der beiden auch implizit konvertierbar sind. Wenn die Struktur A
eine implizite Konvertierung in die Struktur B
hat, wird A?
ebenfalls in B?
konvertiert. Hier"Covariance" der System.Nullable <> Struktur
ein Beispiel:
struct MyNumber
{
public readonly int Inner;
public MyNumber(int i)
{
Inner = i;
}
public static implicit operator int(MyNumber n)
{
return n.Inner;
}
}
Innerhalb einiger Methode:
MyNumber? nmn = new MyNumber(42);
int? covariantMagic = nmn; // works!
In der C# Language Specification Version 4.0 lesen wir, dass eine Umwandlung wie dies gilt für „die vordefinierte implizite Identität existieren und numerische Konvertierungen ".
Aber ist es sicher anzunehmen, dass es auch für benutzerdefinierte implizite Konvertierungen funktioniert?
(könnte diese Frage zu diesem Fehler in Beziehung gesetzt werden: http://connect.microsoft.com/VisualStudio/feedback/details/642227/)
Haben Sie noch Zeit, diese Zitate zu sehen oder geben Sie sie einfach von Hand ein? – Blindy
@Blindy: Beides! Ich habe eine Kopie der Spezifikation auf meinem Schreibtisch, und ich habe diesen Abschnitt kopiert, indem ich tippte ... daher Tippfehler! –
Hmm, ich habe Abschnitt 6.4.2 verpasst und nur 6.1.4 gelesen. Vielen Dank. –