C# 处理;可能的空引用返回“;在启用nullable的项目上实现外部接口时

C# 处理;可能的空引用返回“;在启用nullable的项目上实现外部接口时,c#,nullable-reference-types,C#,Nullable Reference Types,我有以下需要实现的接口,如果没有找到角色,则返回默认值,并生成警告CS8603可能的空引用返回 public async Task<ApplicationRole> FindRoleByIdAsync(string roleId, CancellationToken cancellationToken = default) { //find the role based on ID return it if found else retur

我有以下需要实现的接口,如果没有找到角色,则返回默认值,并生成警告CS8603可能的空引用返回

    public async Task<ApplicationRole> FindRoleByIdAsync(string roleId, CancellationToken cancellationToken = default)
    {
       //find the role based on ID return it if found else
       return default;
    }
public异步任务findrolebyadasync(字符串roleId,CancellationToken CancellationToken=default)
{
//根据ID查找角色如果找到其他角色,则返回该角色
返回默认值;
}
我无法更改接口并使其为空,因为我对Microsoft的影响力不在该级别。。。所以我想用注释更新它(不会使警告消失)

[返回:MaybeNull]
公共异步任务FindRoleByIdAsync(字符串roleId,CancellationToken CancellationToken=default)
{
//根据ID查找角色如果找到,则返回该角色..否则
返回默认值;
}

正确的实现方法是什么,有什么建议吗?

您正在返回一个类(引用类型),因此它的
default
实际上是
null
。如果你真的想这样做,你必须让编译器知道它打算返回
null
,方法是将返回类型从
Task
更改为
Task
。@RacilHilan接口没有指定?因此,我得到了一个错误的接口实现警告,如果我这样做了,那么您不应该返回
null
,它确实很基本。如果要实现接口,则需要适当地实现它。如果您想以自己的方式实现它,那么您应该创建自己的接口。在代码中使用该接口将在调用IRoleStore.FindRoleByIdAsync时返回null,因为它使用MS实现,因为它使用FirstOrDefault(),所以制动行为是不可行的,抑制警告是唯一的选择(针对公司策略…)如果接口真的接受空返回,但是它被声明为不接受空返回,那么您应该考虑对接口的所有者(即使是微软)提交一个bug,并在代码中抑制关于可空返回的警告。您返回一个类(引用类型)。所以它的
默认值
实际上是
null
。如果你真的想这样做,你必须让编译器知道它打算返回
null
,方法是将返回类型从
Task
更改为
Task
。@RacilHilan接口没有指定?因此,我得到了一个错误的接口实现警告,如果我这样做了,那么您不应该返回
null
,它确实很基本。如果要实现接口,则需要适当地实现它。如果您想以自己的方式实现它,那么您应该创建自己的接口。在代码中使用该接口将在调用IRoleStore.FindRoleByIdAsync时返回null,因为它使用MS实现,因为它使用FirstOrDefault(),所以制动行为是不可行的,抑制警告是唯一的选择(针对公司策略…)如果接口真的接受了空返回,但是它被声明为不接受空返回,那么您应该考虑对接口的所有者(即使是微软)提交一个bug,并在代码中抑制关于可空返回的警告。
    [return: MaybeNull]
    public async Task<ApplicationRole> FindRoleByIdAsync(string roleId, CancellationToken cancellationToken = default)
    {
       //find the role based on ID return it if found.. else 
       return default;
    }