0

例:

public static string BoolToYesOrNo(this bool text, out string outAsHtmlName)
{
    string[] choices = { "Yes", "No", "N/A" };
    switch (text)
    {
        case true: outAsHtmlName = choices[0]; return choices[0];
        case false: outAsHtmlName = choices[1]; return choices[1];
        default: outAsHtmlName = choices[2]; return choices[2];
    }
}

オーバーロードがないという例外をスローします...私は2つの引数を使用していますが、1つの引数を取ります。

myBool.BoolToYesOrNo(out htmlClassName);

これは正確な例外です。CS1501:メソッド'BoolToYesOrNo'のオーバーロードなしは1つの引数を取ります。

4

5 に答える 5

2

これはあなたのコードで私にとってはうまくいきます:

static void Main()
{
    bool x = true;
    string html;
    string s = x.BoolToYesOrNo(out html);
}

ほとんどの場合using、宣言するタイプの名前空間へのディレクティブが欠落しているBoolToYesOrNoため、次を追加します。

using The.Correct.Namespace;

コードファイルの先頭に移動します。ここで、

namespace The.Correct.Namespace {
    public static class SomeType {
        public static string BoolToYesOrNo(this ...) {...}
    }
}
于 2012-08-01T08:00:34.043 に答える
1

giving a parameter with out私はあなたのコードをこのように試しました、そしてそれは例外なく動作します、あなたがそうならあなたが何かをするためのメソッドを必要としないなら私が指摘する唯一のことreturn of string

    bool b = true;
    string htmlName;
    string boolToYesOrNo = b.BoolToYesOrNo(out htmlName);
于 2012-08-01T08:01:07.150 に答える
0

これは私がこれをテストするためにしたことです:

  1. Visual Studio 2012 RCで新しいC#コンソールアプリケーション(フレームワーク4.5)を作成しました
  2. program.csこのように変更されました

(sを省略using

namespace ConsoleApplication1
{
    public static class testClass
    {
        public static string BoolToYesOrNo(this bool text, out string outAsHtmlName)
        {
            string[] choices = { "Yes", "No", "N/A" };
            switch (text)
            {
                case true: outAsHtmlName = choices[0]; return choices[0];
                case false: outAsHtmlName = choices[1]; return choices[1];
                default: outAsHtmlName = choices[2]; return choices[2];
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            bool b = true;
            string result = string.Empty;
            string retval = b.BoolToYesOrNo(out result);
            Console.WriteLine(retval + ", " + result); //output: "Yes, Yes";
        }
    }
}
  1. F5キーを押してプログラムを実行しました。コードは完全に実行されました。だから、あなたの方法は実際には正しいです、そして何かが間違っています...まあ、どこか別の場所です。中かっこを再確認してください。中かっこを見逃すと、奇妙なエラーが発生することがあります。
于 2012-08-01T08:38:41.830 に答える
0

コードを貼り付けるだけで問題なく動作します。.net 3.5と4.0の両方を試しましたが、コンパイルエラーは表示されず、結果は正しいです。

なぜこれがオーバーロードメソッドなのですか?

于 2012-08-01T08:38:49.430 に答える
0

MSフォーラムで答えを見つけましたが、これはvs 2012のバグであり、2012年7月の更新をインストールした後、すべてが正常に機能しました。ありがとうございました。

于 2012-08-01T08:54:07.100 に答える