无法在C#中将GetValueorDefault()用于字典

时间:2018-12-27 06:01:06

标签: c# dictionary xamarin.forms .net-standard

我已经定义了具有这种自定义类型的Dictionary,

 public readonly Dictionary<PricingSection, View> _viewMappings = new Dictionary<PricingSection, View>();

现在当我尝试做

_viewMappings.GetValueOrDefault(section);

节的类型为PricingSection

我说错了

  

严重性代码描述项目文件行抑制状态   错误CS1061“字典”不包含“ GetValueOrDefault”的定义,并且找不到包含第一个“字典”类型自变量的可访问扩展方法“ GetValueOrDefault”(您是否缺少using指令或程序集引用?)

我错过了什么吗?

3 个答案:

答案 0 :(得分:12)

  

我错过了什么吗?

您缺少以下事实:Dictionary不包含任何名称为GetValueOrDefault的方法

Dictionary Class

也许您正在寻找

Dictionary.TryGetValue(TKey, TValue) Method

  

获取与指定键关联的值。

ImmutableDictionary.GetValueOrDefault Method (IImmutableDictionary, TKey)

  

如果匹配键存在于指定键中,则获取给定键的值。   字典。


但是您可以实现自己的

public static class Extensions
{
    public static TValue GetValueOrDefault<TKey, TValue>(this Dictionary<TKey, TValue> dict,TKey key)
      =>  dict.TryGetValue(key, out var value) ? value : default(TValue);
}

答案 1 :(得分:1)

GetValueOrDefault()ImmutableDictionary的一部分。因此,您当然会收到错误消息。改为使用

Dictionary.TryGetValue(TKey, TValue)

答案 2 :(得分:0)

当我遇到相同的问题时,我只是想念这个:

java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.get(ArrayList.java:437)
        at com.example.myapp.Activity.MainActivity.onBackPressed(MainActivity.java:225)

如@guyarad所述,这是IReadOnlyDictionary上的扩展方法,但需要导入。看起来似乎很明显,但是由于您可以不使用导入就使用返回的字典,因此在大多数情况下都可以使它感到困惑,但是却丢失了您确定应该具有的某些功能。