C#扩展方法不';似乎不存在

C#扩展方法不';似乎不存在,c#,extension-methods,C#,Extension Methods,我似乎无法在同一命名空间中的另一个类中找到以下扩展方法(MyProject.Util) 正如你所看到的,它基本上是另一个版本的foo[bar]??baz,但我仍然不明白为什么VS2008无法编译,告诉我没有一个版本的Get包含两个参数 有什么想法吗?您是否在使用该方法的文件中导入名称空间(使用MyProject.Util)?错误消息可能不明显,因为您的扩展方法与现有方法同名。您不能像在NameValueCollection.Get中那样使用静态方法。尝试: var nameValueCollec

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

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


有什么想法吗?

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

您不能像在
NameValueCollection.Get中那样使用静态方法。尝试:

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

以下内容似乎对我有用

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;
        }
    }
}

是否检查了目标框架?

该类是否与使用它的类位于同一程序集中?如果否,是否添加了对该程序集的引用?

在我尝试时效果良好。实际上只有一种失败模式:忘记为包含扩展方法的命名空间添加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");
使用System.Collections.Specialized;

使用MyProject.Util;// 我最近遇到了一个类似的问题,并追踪到它没有引用System.Core(该项目是根据3.5编译的,但该引用在尝试VS2010/.Net 4.0时被意外删除)。

关闭并重新打开解决方案。然后尝试编译。@Ismail s:恐怕没有帮助。这可能有助于添加调用代码。facepalm由于一个小的输入错误,扩展类实际上位于一个全新的命名空间中。这就是错误所在。他写道,
在同一个名称空间中
。相同的名称不是问题。它在我这边正常工作,这是我代码中的一个输入错误,使扩展进入了一个全新的名称空间。我真傻。我不是把它当作静态方法来使用,那只是我试图解释错误。目标框架版本对我来说似乎是最有可能的罪魁祸首@布拉布拉赫:确保你的目标是.NET3.5或更高版本。我一直在使用.NET3.5。顺便说一句,我是在ASP.NET MVC中这样做的,我甚至不确定我能用3.5以下的任何东西来做。我在VS2008项目中扩展引用时发现
System.Core
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");