2010-11-22 6 views
3

Ich habe eine Funktion, die MemoryStream? zurückgibt. Also null, wenn ein Fehler aufgetreten ist. Dann fand ich, dass ich nicht eine Variable MemoryStream?Warum kann ich keinen MemoryStream-Nullwert (MemoryStream?) Deklarieren, wenn eine Funktion MemoryStream zurückgeben kann?

public MemoryStream? GetResponseStream() { } 
MemoryStream? stream = GetResponseStream(); 

vom Typ ‚System.IO.MemoryStream‘ erklären kann, muss ein Nicht-Nullable-Wertetyp sein, um es als Parameter zu verwenden ‚T‘ in gattungs oder Methode ‚System.Nullable‘

Antwort

16

MemoryStream ist ein Referenztyp (deklariert mit dem class Schlüsselwort), und daher ist bereits NULL festlegbaren von selbst aus. Nur Werttypen (die mit dem Schlüsselwort struct deklariert wurden) sind nicht nullfähig und können mit ? nullwertfähig gemacht werden.

public MemoryStream GetResponseStream() { ... } 

und Ihren Methodenaufruf wie folgt aus::

MemoryStream stream = GetResponseStream(); 
if (stream == null) { ... } 

BTW:

So Ihre Methode sollte wie folgt aussehen könnten Sie Ausnahmen betrachten wollen, mit signalisieren, dass ein Fehler in GetResponseStream aufgetreten anstatt null zurückzugeben.

1

MemoryStream ist ein Referenztyp, so kann null sein. In Nullable<T> können nur Werttypen eingegeben werden, da ihnen sonst kein Nullwert zugewiesen werden kann.

0

Nur Werttypen können Nullwerte enthalten, keine Referenztypen. A MemoryStream kann bereits null sein, daher ist es nicht sinnvoll, es nullfähig zu machen

0

Es ist nicht erforderlich, ? als Referenztypen können null sein.

public MemoryStream GetResponseStream() 
{ 
    return(null); 
} 
0

Der Nullwertmodifikator (?) Wird nur für Werttypen verwendet. Ein Stream ist ein Objekttyp, der immer auf null gesetzt werden kann (von Natur aus bereits 'Nullable'). Es besteht also keine Notwendigkeit, was Sie zu tun versuchen.

Verwandte Themen