【发布时间】:2019-12-11 14:39:58
【问题描述】:
这篇文章是针对 C# 8 的。假设我想要这个方法:
public static TValue Get<TKey, TValue>(
this Dictionary<TKey, TValue> src,
TKey key,
TValue @default
)
=> src.TryGetValue(key, out var value) ? value : @default;
如果我的.csproj 看起来像这样(即启用了 C# 8 和可空类型,则所有警告都是错误):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<LangVersion>8</LangVersion>
<Nullable>enable</Nullable>
<WarningsAsErrors>true</WarningsAsErrors>
</PropertyGroup>
…
</Project>
此代码将产生以下构建时错误:
DictionaryEx.cs(28, 78): [CS8714] 类型“TKey”不能用作泛型类型或方法“Dictionary”中的类型参数“TKey”。类型参数“TKey”的可空性与“notnull”约束不匹配。
有没有办法指定TKey 必须是不可为空的类型?
【问题讨论】:
-
对我来说,这段代码编译时没有 CS8714 或任何其他警告。
标签: c# generics c#-8.0 non-nullable nullable-reference-types