簡體   English   中英

如何將“任何不可為空類型”指定為泛型類型參數約束?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM