我似乎无法在同一名称空间(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
有两个参数。
有什么想法吗?
答案 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时意外删除了该引用)。