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");