3

を返す関数がありますMemoryStream?。エラーが発生した場合は null です。次に、変数を宣言できないことがわかりましたMemoryStream?

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

型 'System.IO.MemoryStream' は、ジェネリック型またはメソッド 'System.Nullable' でパラメーター 'T' として使用するために、null 非許容値型である必要があります。

4

5 に答える 5

16

MemoryStreamclassは(キーワードで宣言された)参照型であるため、それ自体ですでにnull許容です。(キーワードで宣言された)値型のみstructがnull許容ではなく、。でnull許容にすることができます?

したがって、メソッドは次のようになります。

public MemoryStream GetResponseStream() { ... }

そしてあなたのメソッドはこのように呼び出します:

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

ところで:をGetResponseStream返すのではなく、例外を使用してエラーが発生したことを通知することを検討することをお勧めしますnull

于 2010-11-22T14:34:46.440 に答える
1

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

于 2010-11-22T14:35:06.830 に答える
0

null許容できるのは値型のみであり、参照型はできません。AMemoryStreamはすでにnullになる可能性があるため、null許容にすることは意味がありません

于 2010-11-22T14:35:07.863 に答える
0

?参照型はである可能性があるため、必要はありませんnull

public MemoryStream GetResponseStream()
{
    return(null);
}
于 2010-11-22T14:35:33.473 に答える
0

null許容修飾子(?)は、値型でのみ使用されます。ストリームはオブジェクトタイプであり、常にnullに設定できます(その性質上、すでに「null可能」です)。したがって、あなたがやろうとしていることをする必要はありません。

于 2010-11-22T14:36:35.993 に答える