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的”)。因此,没有必要去做你想做的事情