[英]How do I specify "any non-nullable type" as a generic type parameter constraint?
這篇文章是針對 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
必須是不可為空的類型?
好的,剛剛發現您可以使用 notnull 約束:
public static TValue Get<TKey, TValue>(
this Dictionary<TKey, TValue> src,
TKey key, TValue @default)
where TKey : notnull
=> src.TryGetValue(key, out var value) ? value : @default;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.