这篇文章是关于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
必须是非空类型?