简单字符串扩展方法导致编译错误

时间:2012-12-05 01:05:33

标签: c# asp.net-mvc extension-methods

我在一个简单的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类在控制台应用程序中正常工作

2 个答案:

答案 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中的新目录有关。

修复只是删除类文件,然后再次将类添加到您的解决方案中。这将修复编译器错误。