Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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#8中的可空泛型类型作为方法的返回类型?_C#_Generics_Nullable Reference Types - Fatal编程技术网

如何允许C#8中的可空泛型类型作为方法的返回类型?

如何允许C#8中的可空泛型类型作为方法的返回类型?,c#,generics,nullable-reference-types,C#,Generics,Nullable Reference Types,我有以下代码: public async Task<T> Retrieve<T>() where T : class, ITableEntity { var result = await GetData<T>(); return result.Result as T; // result.Result is object } 公共异步任务检索() 其中T:class,ITableEntity { var result=await Ge

我有以下代码:

public async Task<T> Retrieve<T>()
    where T : class, ITableEntity
{
    var result = await GetData<T>();
    return result.Result as T; // result.Result is object
}
公共异步任务检索() 其中T:class,ITableEntity { var result=await GetData(); 返回result.result作为T;//result.result是对象 } 现在,编译器给出了一个警告
可能的空引用返回
。我可以用“!”来修复它,但我确实希望允许null,所以这样做似乎是错误的。我真的不知道为什么编译器会假设类意味着不可空,我试着写
类?
(我甚至不知道这意味着什么,但它会编译,尽管它给出了相同的警告)

是否可以告诉编译器T可以是可为null的引用类型?我猜它默认为不可空。

公共异步任务检索()
其中T:class,ITableEntity

如果希望
t
可以为空,那么它不应该是
Task
作为返回类型吗?这是否意味着尽管t本身不可以为空,但如果我将其传递到错误的上下文中,会有警告?看起来有点奇怪,我有一个已经可以为空的T,但是我们没有?增加了“一个可空”@IlyaChernomordik,但这就是C#8可空性的全部要点
T
不可为空,即使已知
T
是引用类型<代码>T?可为空。例如,对于
System.String
(一个类):
String
是不可为空的,
String?
是可为空的。@由于某些原因,这不适用于类级别上的泛型类型参数:
RepositoryBase where T:BaseEntity
和方法
Task GetAsync(…)
I get error:
必须知道可为null的类型参数是值类型或不可为null的引用类型。考虑添加“类”、“结构”或类型约束。< /代码> @ PavelVoronin,听起来好像在项目或类级别上没有启用引用空值;这里的示例:-取消注释
#nullable enable
,它工作正常(注意:理想情况下,您应该在csproj中执行此操作,而不是通过
#nullable
)是的,刚刚发现了这一点。我必须添加
notnull
RepositoryBase其中T:notnull,BaseEntity