【问题标题】:Dictionary extension compiles but not callable字典扩展编译但不可调用
【发布时间】:2014-02-12 04:00:25
【问题描述】:

我正在做与这里提到的完全相同的事情:Which mechanism is a better way to extend Dictionary to deal with missing keys and why?

为返回默认值的字典创建一个 getter。它编译得很好,但是任何尝试使用它的人都会得到一个编译器错误,说......并且找不到接受 System.collections.Genericc.Dictionary 类型的第一个参数的扩展方法“ObjectForKey”。

这是定义

public static TValue ObjectForKey<TKey,TValue>(this Dictionary<TKey,TValue> dictionary, TKey key)
{
    TValue val = default(TValue);
    dictionary.TryGetValue(key,out val);
    return val;
}

这是我尝试使用它的方法

Dictionary<string,object> dictionary = <stuff>
object val = dictionary.ObjectForKey("some string");

有什么想法吗?

【问题讨论】:

  • 这里没有出现这个错误。请提供更多背景信息,或者尝试将用例减少到最低限度,也许作为一个新项目。

标签: c# dictionary


【解决方案1】:

您应该在 static(使其成为扩展)和 public(使其可在类外部访问)类中定义您的扩展方法

public static class MyExtensions
{
    public static TValue ObjectForKey<TKey,TValue>(this Dictionary<TKey,TValue> dictionary, TKey key)
    {
        TValue val = default(TValue);
        dictionary.TryGetValue(key,out val);
        return val;
    }
}   

【讨论】:

  • ...并确保命名空间包含在您的 using 语句中,如果它与使用扩展的类不同。
  • @Selman22 如果不是这样,它将无法编译。
  • 他们可能在另一个实例类中定义了扩展。如果我没记错的话,它会编译,但在调用它时不会被检测为适当的扩展方法。
  • 好的,它在那里,但不是静态的。谢谢!问题解决了。生病尽快标记。
  • 实际上,当我尝试在实例类中定义扩展方法时,出现编译错误“扩展方法必须在非泛型静态类中定义”
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多