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

コンパイラは、名前 'Helpers' が名前空間 'MyFirstMVC4' に存在しないというエラーをスローします。

using MyFirstMVC4.Helpers ステートメントを削除すると、コンパイラは文字列に WordCount の定義がないというエラーをスローします。

ASP.NET MVC 4 Web アプリケーションとまったく同じようにコピーされた Sample クラスは、コンソール アプリケーションで正常に動作します

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

助けてくれてありがとう。2 つの注意事項: 1 つ目は、Visual Studio 2012 を再起動しましたが、問題は解決しませんでした。2 つ目は、構文的に正しく、以前は正常にコンパイルされていた別のクラスで、このバグが再び発生したことです。このバグは、以前にコンパイルしたクラスを Visual Studio 2012 の新しいディレクトリに移動することに関係しているようです。

修正するには、クラス ファイルを削除してから、クラスをソリューションに再度追加します。これにより、コンパイラ エラーが修正されます。

于 2012-12-12T01:52:11.093 に答える