2 Stimmen

Warum können bestimmte Silverlight-Objekte keine Nullable<>-Typen sein?

Anscheinend kann man keine Nullable<Rectangle> in Silverlight. Ich würde gerne die technischen Gründe wissen, warum dies nicht der Fall ist und auf wie viele Objekte dies zutreffen könnte?

Heute habe ich versehentlich eine kleine Kommentar zum Flammenkrieg nachdem ich festgestellt hatte, dass der Typ "Rechteck" kein nullbarer Typ ist. Das heißt, man kann nicht einen " Nullable<Rectangle> " oder ein " Viereckig? "

Mein Fehler war, dass ich es nur in Silverlight getestet habe und davon ausging, dass das Verhalten eines Silverlight System.Windows.Shapes.Rectangle auf den Typ System.Drawing.Rectangle in .Net übertragbar ist. Schande über mich. Ich habe meine Kommentare inzwischen gelöscht, da sie keinen Mehrwert für Stack Overflow darstellen.

Wenn jemand diese Frage vollständig beantworten kann, wäre ich Ihnen sehr dankbar.

9voto

Quartermeister Punkte 55099

Nullable<T> kann nur mit Werttypen oder Strukturen verwendet werden, und System.Windows.Shapes.Rectangle ist ein Referenztyp oder eine Klasse. Sie brauchen nicht zu verwenden Nullable<T> da Sie einer Variablen vom Typ System.Windows.Shapes.Rectangle bereits eine Null-Referenz zuweisen können:

System.Windows.Shapes.Rectangle rect = null;

Im Gegensatz dazu ist System.Drawing.Rectangle ein Werttyp und kann daher nicht den Wert Null haben. Der Standardwert ist ein Rechteck aus lauter Nullen.

System.Drawing.Rectangle rect = null; // Does not compile
System.Drawing.Rectangle rect = 
    default(System.Drawing.Rectangle); // All fields are zero

0voto

user429921 Punkte 309

Eine bessere Antwort wäre, die Unterschiede zwischen Optionstypen und Nullable-Typen zu betrachten, was übrigens im ECMA-Standard für die Common Language Infrastructure for Generics behandelt wird.

A großartige Erklärung dazu wurde bereits für F# auf StackOverflow gegeben.

Sie wollen also kein Nullable<Rectangle>. Du willst ein Option<Rectangle>.

Siehe MSDN-Dokumentation: Core.Option-Modul (F#)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X