NET 6 - 引用类型的可空性警告

4
在.NET 6中,我有一个仓库异步返回字符串,这个字符串可能来自REST API或文本文件。由于结果可能为空,因此返回类型是可空字符串,包含在任务Task<string?>中:
public interface IFooRepository
{
    Task<string?> FetchAsync(string path);
}

一个具体的存储库类会长这样:

public class FooRepository : IFooRepository
{
    public async Task<string?> FetchAsync(string path)
    {
        string? result = null;

        if (File.Exists(path))
        {
            result = await File.ReadAllTextAsync(path);
        }

        return result;
    }
}

接下来,我添加了一个模拟的存储库类,用于单元测试。它只是简单地返回常量值。(显然,它永远不会返回null。)

public class MockFooRepository : IFooRepository
{
    public Task<string?> FetchAsync(string path)
    {
        string? result = "ok!";
        return Task.FromResult(result);
    }
}

添加模拟库后,我开始收到警告信息: 空引用类型的可空性与目标类型 'Task<string?>' 的类型不匹配。
为了解决这个问题,我不想使用预处理指令 #pragma warning disable CS8619 来隐藏警告信息。
相反,应该采取什么正确的方式来解决这个问题呢?

1
@KirkWoll 感谢您指出。我已经编辑过了。 - Toshi
1
您还可以从csproj文件中删除<Nullable>enable</Nullable>。 - AchoVasilev
1个回答

5
在调用FromResult时,您需要自己指定通用参数。
return Task.FromResult<string?>(result);

1
或者,确实可以使用 Task.FromResult((string?) result) (当然,我们可以省略 result 并直接使用 Task<string?> FetchAsync(string path) => Task.FromResult((string?) "ok!"),这不仅更短,而且可能更少令人困惑)。 - Jeroen Mostert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接