我正在逐步学习如何处理文本框验证的教程。然而,我一直收到一个错误";词典<字符串,列表>不包含"GetValueOrDefault"的定义&";,尽管它在我正在看的视频中确实有效。
我正在使用System。集合。Generic,实现INotifyDataErrorInfo。我有以下属性:
private readonly Dictionary<string, List<string>> _propertyErrors = new Dictionary<string, List<string>>();
我有以下方法:
public IEnumerable GetErrors(string propertyName)
{
return _propertyErrors.GetValueOrDefault(propertyName, null);
}
但它不会接受我尝试使用GetValueOrDefault。为什么?我所有的研究表明它是可用的。
可能有一些误解,但TryGetValue
是您需要的东西。
public IEnumerable GetErrors(string propertyName)
{
return _propertyErrors.TryGetValue(propertyName, out var value) ? value : null; // 'null' will be hit here if there's no requested key in the Dictionary
}
Btw,
private readonly Dictionary<string, List<string>> _propertyErrors = new Dictionary<string, List<string>>();
不是属性,而是字段。
这里有一个属性(例如(:
public Dictionary<string, List<string>> PropertyErrors { get; } = new Dictionary<string, List<string>>();
If Dictionary。GetValueOrDefault会给您带来编译错误,这可能是因为您使用的是旧版本的。Net和您从中提取的示例都在的更新版本上。网
正如其他人所说,TryGetValue很可能是您想要的,应该是缺少GetValueOrDefault的合适替代品。
如果你一定要的话。GetValueOrDefault,您需要将您的项目升级到。Net Core 2.0、.Net Standard 2.1或.Net Standard 2.1。净5.0。
https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.collectionextensions.getvalueordefault?view=net-5.0
如果你向下滚动,你会看到一个很大的部分,上面写着";适用于";以及">Net 6.0预览3和其他版本";。如果你点击箭头,它将展开并显示该功能存在的其他版本。