我在一个简单的MVC4应用程序中名为Helpers的文件夹中有以下类:
namespace MyFirstMVC4.Helpers
{
public static class Sample
{
public static int WordCount(this string str)
{
return str.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
然后我在控制器中有以下代码:
using MyFirstMVC4.Helpers;
int x = "1 2 3 4".WordCount();
编译器抛出一个错误,名称'Helpers'在命名空间'MyFirstMVC4'中不存在。
如果我删除了使用MyFirstMVC4.Helpers语句,编译器会抛出一个错误,说明字符串没有WordCount的定义
与ASP.NET MVC 4 Web应用程序完全相同的Sample类在控制台应用程序中正常工作。
答案 0 :(得分:1)
扩展方法必须声明名称空间。
假设你的“Sample”类在“Foo.Bar”命名空间中,你需要去
using Foo.Bar;
这是我正在使用的字数扩展名:
namespace Core.BaseLibrary.Extensions
{
public static class StringExtensions
{
/// <summary>
/// Returns a count of words in the passed string.
/// </summary>
/// <param name="stringToCount">The string to count.</param>
/// <returns>An integer containing the number of words in the string</returns>
public static int WordCount(this string stringToCount)
{
return Regex.Matches(stringToCount, @"[\S]+").Count;
}
}
}
以下是我如何使用它:
using Core.BaseLibrary.Extensions;
int wordCount = value.ToString().WordCount();
但是
int wc = "1 2 3 4 5".WordCount();
也有效。
换句话说,从语法上看,你做的一切都是正确的。
答案 1 :(得分:0)
感谢您的帮助。两个警告:一,我重新启动Visual Studio 2012,这并没有解决我的问题。第二,这个错误再次发生在我身上,另一个语法正确,以前编译得很好。该错误似乎与将以前编译的类移动到Visual Studio 2012中的新目录有关。
修复只是删除类文件,然后再次将类添加到您的解决方案中。这将修复编译器错误。