![](/img/trans.png)
[英]"Cannot convert null literal to non-nullable reference type" when using @ref in a Blazor component
[英]Cannot convert null literal to non-nullable reference type
使用 C# 10 我有界面:
public interface IPluralRuleProvider {
Boolean TryGetRule(CultureInfo culture, out PluralizationRuleDelegate rule);
}
在 class 中,我正在實施該方法並且我有:
Rules = new Dictionary<String, PluralizationRuleDelegate>();
Boolean IPluralRuleProvider.TryGetRule(CultureInfo culture, out PluralizationRuleDelegate rule)
{
rule = null;
if (Rules.TryGetValue(culture.Name, out rule))
return true;
if (culture.Parent != null && Rules.TryGetValue(culture.Parent.Name, out rule))
return true;
return false;
}
我收到警告:
無法將 null 文字轉換為不可為 null 的引用類型
可能的 null 參考分配
我一直在嘗試不同的版本,但總是收到某種警告。
我可以改變一些東西來避免這種情況嗎?
TryGetRule
返回false
時, out rule
參數將分配給null
。
out PluralizationRuleDelegate rule
添加兩個注釋:
PluralizationRuleDelegate?
- 即“ rule
可以是null
”。[NotNullWhen(true)]
- 即“即使我們已將rule
聲明為 maybe- null
,我們小指發誓 promise 當此方法返回true
時, out rule
參數將不是null
。
[NotNullWhen(true)]
后置條件 - 因此請務必仔細檢查您的邏輯 - 考慮添加&& rule != null
檢查每個 this.Rules。 TryGetValue` 調用站點也是如此。 無論如何,將您的interface
更改為:
using System.Diagnostics.CodeAnalysis;
public interface IPluralRuleProvider {
Boolean TryGetRule(CultureInfo culture, [NotNullWhen(true)] out PluralizationRuleDelegate? rule);
}
和實施:
using System.Diagnostics.CodeAnalysis;
Boolean IPluralRuleProvider.TryGetRule(CultureInfo culture, [NotNullWhen(true)] out PluralizationRuleDelegate? rule) {
if (this.Rules.TryGetValue(culture.Name, out rule))
return true;
if (culture.Parent != null && this.Rules.TryGetValue(culture.Parent.Name, out rule))
return true;
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.