C#扩展方法似乎不存在

时间:2010-04-20 12:07:49

标签: c# extension-methods

我似乎无法在同一名称空间(MyProject.Util)的另一个类中找到以下扩展方法。

using System.Collections.Specialized;

namespace MyProject.Util
{
    public static class Extensions
    {
        public static string Get(
             this NameValueCollection me,
             string key,
             string def
        )
        {
            return me[key] ?? def;
        }
    }
}

你可以看到它基本上是foo[bar] ?? baz的另一个版本,但我仍然不明白为什么VS2008无法编译,告诉我没有版本的Get有两个参数。

有什么想法吗?

6 个答案:

答案 0 :(得分:5)

您是否在使用该方法的文件中导入名称空间(使用using MyProject.Util)?错误消息可能不明显,因为您的扩展方法与现有方法具有相同的名称。

答案 1 :(得分:3)

您不能像NameValueCollection.Get中那样使用类似静态方法的扩展方法。尝试:

var nameValueCollection = new NameValueCollection();
nameValueCollection.Get( ...

答案 2 :(得分:1)

以下似乎对我有用......

using System.Collections.Specialized;

namespace MyProject.Util
{
    class Program
    {
        static void Main(string[] args)
        {
            var nvc = new NameValueCollection();
            nvc.Get(  )
        }
    }
}


namespace MyProject.Util
{
    public static class Extensions
    {
        public static string Get(
             this NameValueCollection me,
             string key,
             string def
        )
        {
            return me[key] ?? def;
        }
    }
}

您检查过目标框架吗?

答案 3 :(得分:1)

该类与使用它的类在同一个程序集中吗?如果不是,您是否添加了对该程序集的引用?

答案 4 :(得分:1)

我尝试时工作正常。实际上只有一种失败模式:忘记为包含扩展方法的命名空间添加using语句:

using System.Collections.Specialized;
using MyProject.Util;     // <== Don't forget this!
...
    var coll = new NameValueCollection();
    coll.Add("blah", "something");
    string value = coll.Get("blah", "default");

答案 5 :(得分:0)

我最近遇到了一个类似的问题,并追溯到没有引用System.Core(该项目是针对3.5进行编译的,但在尝试使用VS2010 / .Net 4.0时意外删除了该引用)。