Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字典扩展可编译但不可调用_C#_Dictionary - Fatal编程技术网

C# 字典扩展可编译但不可调用

C# 字典扩展可编译但不可调用,c#,dictionary,C#,Dictionary,我正在做与这里提到的完全相同的事情: 为返回默认值的字典生成getter。它可以很好地编译,但是任何试图使用它的人都会收到一个编译器错误,提示…并且找不到接受System.collections.Genericc.Dictionary类型的第一个参数的扩展方法“ObjectForKey” 这里是定义 public static TValue ObjectForKey<TKey,TValue>(this Dictionary<TKey,TValue> dictionary,

我正在做与这里提到的完全相同的事情:

为返回默认值的字典生成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;
}
publicstatictvalue ObjectForKey(这个字典,TKey)
{
TValue val=默认值(TValue);
TryGetValue(key,out val);
返回val;
}
下面是我如何尝试使用它

Dictionary<string,object> dictionary = <stuff>
object val = dictionary.ObjectForKey("some string");
字典=
object val=dictionary.ObjectForKey(“某些字符串”);

有什么想法吗?

您应该在静态类中定义扩展方法(进行is扩展)和公共类中定义扩展方法(进行类外访问)

公共静态类MyExtensions
{
公共静态TValue ObjectForKey(此字典,TKey)
{
TValue val=默认值(TValue);
TryGetValue(key,out val);
返回val;
}
}   

…如果命名空间与使用扩展的类不同,请使用语句确保命名空间包含在您的
中。@Selman22如果不是这样,它将不会编译。他们可能在另一个实例类中定义了扩展。它可以编译,但如果我没记错的话,当它调用它时,它不会被检测为一个合适的扩展方法。谢谢问题解决了。事实上,当我试图在实例类中定义扩展方法时,我得到了一个编译错误“扩展方法必须在非泛型静态类中定义”我没有得到这个错误。请提供更多的上下文,或者尝试将用例减少到最低限度,可能是作为一个新项目。
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;
    }
}