NET 6 - 引用类型的可空性警告
NET 6 - Nullability of reference types warning
在 NET 6 中,我有一个异步存储库 returns 字符串,它可能来自 REST API 或文本文件。由于结果可能为空,因此 return 类型在任务 Task<string?>
:
中是可为空的字符串
public interface IFooRepository
{
Task<string?> FetchAsync(string path);
}
存储库的具体 class 看起来像:
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;
}
}
接下来,我添加了单元测试使用的模拟存储库 class。这只是 return 的常量值。 (显然,它永远不会 return null。)
public class MockFooRepository : IFooRepository
{
public Task<string?> FetchAsync(string path)
{
string? result = "ok!";
return Task.FromResult(result);
}
}
添加模拟存储库后,我开始收到警告消息:
Nullability of reference types in value of type 'Task' doesn't match target type 'Task<string?>'.
为了处理警告,我不想隐藏 使用预处理器指令的警告消息#pragma warning disable CS8619
。
相反,处理该问题的正确方法是什么?
调用 FromResult 时自行指定泛型参数
return Task.FromResult<string?>(result);
在 NET 6 中,我有一个异步存储库 returns 字符串,它可能来自 REST API 或文本文件。由于结果可能为空,因此 return 类型在任务 Task<string?>
:
public interface IFooRepository
{
Task<string?> FetchAsync(string path);
}
存储库的具体 class 看起来像:
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;
}
}
接下来,我添加了单元测试使用的模拟存储库 class。这只是 return 的常量值。 (显然,它永远不会 return null。)
public class MockFooRepository : IFooRepository
{
public Task<string?> FetchAsync(string path)
{
string? result = "ok!";
return Task.FromResult(result);
}
}
添加模拟存储库后,我开始收到警告消息:
Nullability of reference types in value of type 'Task' doesn't match target type 'Task<string?>'.
为了处理警告,我不想隐藏 使用预处理器指令的警告消息#pragma warning disable CS8619
。
相反,处理该问题的正确方法是什么?
调用 FromResult 时自行指定泛型参数
return Task.FromResult<string?>(result);