1

我在一个简单的 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();

编译器抛出一个错误,指出名称空间“MyFirstMVC4”中不存在名称“Helpers”。

如果我删除了 using MyFirstMVC4.Helpers 语句,编译器会抛出一个错误,指出字符串没有 WordCount 的定义

复制的 Sample 类与我的 ASP.NET MVC 4 Web 应用程序中的完全相同,在控制台应用程序中运行良好

4

2 回答 2

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

也有效。

所以换句话说,看起来你在语法上做的一切都是正确的。

于 2012-12-05T01:11:12.287 回答
0

谢谢你们的帮助。两个警告:一,我重新启动了 Visual Studio 2012,但这并没有解决我的问题。第二,这个错误再次发生在我身上,另一个类在语法上是正确的并且之前编译得很好。该错误似乎与将以前编译的类移动到 Visual Studio 2012 中的新目录有关。

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

于 2012-12-12T01:52:11.093 回答