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];
    }
}

抛出一个没有重载的异常......需要1个参数,尽管我使用了2个参数。

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

在 MS 论坛上找到答案,是 vs 2012 错误,安装 2012 年 7 月更新后,一切正常。谢谢你。

于 2012-08-01T08:54:07.100 回答
0

这就是我为测试这一点所做的:

  1. 我在 Visual Studio 2012 RC 中创建了一个新的 C# 控制台应用程序(框架 4.5)
  2. 变成program.cs了这样

(省略usings)

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 回答