Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用字符串和字符串[]时重载方法时出现问题_C#_Overloading - Fatal编程技术网

C# 使用字符串和字符串[]时重载方法时出现问题

C# 使用字符串和字符串[]时重载方法时出现问题,c#,overloading,C#,Overloading,我在C#中重载方法时遇到了一些问题。我有两种方法看起来像这样 public static void Sample(string string1, string string2, string string3, System.Windows.Forms.MessageBoxButtons buttons) {} public static void Sample(string string1, string[] string2, string string3, System.Windows.Fo

我在C#中重载方法时遇到了一些问题。我有两种方法看起来像这样

public static void Sample(string string1, string string2, string string3, 
System.Windows.Forms.MessageBoxButtons buttons)
{}
public static void Sample(string string1, string[] string2, string string3, System.Windows.Forms.MessageBoxButtons buttons)
{}
string[] myStringArray = new string[] {"this is a test","of overloaded methods"};
Sample("String1",myStringArray,"String2",System.Windows.Forms.MessageBoxButtons.OK);
当我尝试调用第二个方法时,我得到一个错误“无法将‘string[]”转换为‘string’”。我做错了什么

当我重载不接受MessageBoxButtons枚举但不接受此方法的方法时,它会起作用

调用代码如下所示

public static void Sample(string string1, string string2, string string3, 
System.Windows.Forms.MessageBoxButtons buttons)
{}
public static void Sample(string string1, string[] string2, string string3, System.Windows.Forms.MessageBoxButtons buttons)
{}
string[] myStringArray = new string[] {"this is a test","of overloaded methods"};
Sample("String1",myStringArray,"String2",System.Windows.Forms.MessageBoxButtons.OK);
编辑: 问题出在我的构建脚本中。在创建引用第一个dll的下一个dll之前,它并没有等待dll的创建,因此在不在被引用的dll中的位置进行了更改


我猜这是不使用IDE的一个陷阱。

您还没有显示调用代码。我的猜测是,您试图将字符串数组作为第一个或第三个参数而不是第二个参数传递-但是如果您发布代码(或者更好,一个简短但完整的示例),那么我们将能够对其进行排序。

如果看不到您如何调用它,很难判断,但您需要确保第一个和第三个参数始终是字符串,当然,最后一个参数的类型是MessageBoxButtons。只有第二个参数可以更改

这能满足您的需要吗

public static void Sample(MessageBoxButtons buttons, params string[] args)
{
}

编译此文件时仍然没有错误:

using System;

namespace Test
{
    class Program
    {
        public static void Sample(string string1, 
            string string2, 
            string string3, 
            System.Windows.Forms.MessageBoxButtons buttons)
        { }
        public static void Sample(string string1, 
            string[] string2, 
            string string3, 
            System.Windows.Forms.MessageBoxButtons buttons)
        { }

        static void Main()
        {
            string[] myStringArray = 
                new string[] { "this is a test", "of overloaded methods" };
            Sample("String1", 
                myStringArray, 
                "String2", 
                System.Windows.Forms.MessageBoxButtons.OK);
        }
   }
}

在您的环境中是否存在此错误?

能否发布一个简短但完整的程序来演示此问题?同上。我将这些方法复制到一个测试应用程序中,然后将它们都称为w/o error。可能是调用中的错误,而不是函数中的错误。