Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';当函数可以返回MemoryStream时,我是否声明MemoryStream为null(MemoryStream?)?_C#_Nullable_Memorystream - Fatal编程技术网

C# 为什么可以';当函数可以返回MemoryStream时,我是否声明MemoryStream为null(MemoryStream?)?

C# 为什么可以';当函数可以返回MemoryStream时,我是否声明MemoryStream为null(MemoryStream?)?,c#,nullable,memorystream,C#,Nullable,Memorystream,我有一个返回MemoryStream?的函数。如果发生错误,则为空。然后我发现我不能声明变量MemoryStream? public MemoryStream? GetResponseStream() { } MemoryStream? stream = GetResponseStream(); 类型“System.IO.MemoryStream”必须是不可为null的值类型,才能将其用作泛型类型或方法“System.nullable”中的参数“T” 是引用类型(用类关键字声明),因此本身就可

我有一个返回
MemoryStream?
的函数。如果发生错误,则为空。然后我发现我不能声明变量
MemoryStream?

public MemoryStream? GetResponseStream() { }
MemoryStream? stream = GetResponseStream();
类型“System.IO.MemoryStream”必须是不可为null的值类型,才能将其用作泛型类型或方法“System.nullable”中的参数“T”

是引用类型(用
关键字声明),因此本身就可以为空。只有值类型(使用
struct
关键字声明)不可为空,并且可以使用
使其为空

因此,您的方法应该如下所示:

public MemoryStream GetResponseStream() { ... }
MemoryStream stream = GetResponseStream();
if (stream == null) { ... }
您的方法调用如下:

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

BTW:您可能想考虑使用异常来指示在<代码> GETRealsFixs<代码>中发生错误,而不是返回<代码> null 。

<代码>代码>内存流< /代码>是引用类型,因此可以为NULL。只有值类型才能成为可为null的,因为不允许为它们分配null值。

只有值类型可以为null,而不是引用类型。
MemoryStream
已经可以为null,因此将其设置为null是没有意义的

不需要
,因为引用类型可以为
null

public MemoryStream GetResponseStream()
{
    return(null);
}
可为空的修饰符(?)仅用于值类型。流是一种对象类型,它总是可以设置为null(就其性质而言,它已经是“可为null的”)。因此,没有必要去做你想做的事情