2010-11-22 15 views
3

私はMemoryStream?を返す関数を持っています。エラーが発生した場合はnullです。それから私は、私はジェネリック型にパラメータとして「T」がそれを使用するために、非NULL可能値型でなければならない変数MemoryStream?関数がMemoryStreamを返すことができるときに、なぜMemoryStreamがnullable(MemoryStream?)を宣言できないのですか?

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

型「System.IO.MemoryStream」を宣言することができないことがわかりましたまたはメソッド「可能System.Nullable」

答えて

16

MemoryStreamは(classキーワードで宣言)参照型であるため、既にそれ自体でNULL可能です。値のタイプ(structキーワードで宣言されている)のみがnullableではなく、?でNULL値に設定できます。

だからあなたの方法は次のようになります。

public MemoryStream GetResponseStream() { ... } 

と、このようなあなたのメソッドの呼び出し:ところで

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

:あなたは、エラーがGetResponseStreamで発生したことを知らせるために、例外を使用して検討する必要があります返信するのではなくnullです。

1

MemoryStreamはnullである可能性があります。値の型はNullable<T>にすることができます。それ以外の場合はnull値を割り当てることができないためです。

0

参照型ではなく、値の型のみをNULL可能にすることができます。 MemoryStreamはすでにヌルである可能性があるので、ヌル可能にすることは意味がありません。

0

参照型はnullであるため、?の必要はありません。

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

null可能な修飾子(?)は、値型でのみ使用できます。ストリームはオブジェクト型で、常にnullに設定できます(その性質上、すでに 'nullable'です)。だからあなたがしようとしていることを何もする必要はありません。

関連する問題