C#方法重载在使用字符串args时调用了错误的方法

时间:2017-01-30 21:40:00

标签: c# overloading args

我正在尝试为自己创建一个日志插件,我希望有一个方法,我用不同的参数重载它。
关键是,它需要可以添加多个字符串,我将在不同的行上打印。我喜欢使用params的想法,这样我每次都不需要添加string[] { strings here }

我目前的问题是Log.L()方法不会触发第一种方法,而是第二种方法,这有点意义。

如何在保留params

的同时解决此问题
Log.L("line1", "line2", "line3");

public static class Log
{
   public static void L(params string[] message)
   {
       Write(LogType.Log, message);
   }   

   public static void L(string location, params string[] message)
   {
       Write(LogType.Log, message, false, location);
   }
}

2 个答案:

答案 0 :(得分:0)

它总是假设第一个字符串是location所以,只需使用第二个重载:

public static void L(string location, params string[] message)
   {
       Write(LogType.Log, message, false, location);
   }

当位置不可用时,您可以简单地传递null或空字符串,并在方法中处理它。

答案 1 :(得分:0)

您可以创建两个类并使用它们来区分两个重载。如果你愿意,你甚至可以让一个类继承另一个类。

public class LoginWithMessages {
    public string[] Messages {get; set;}
}

public class LoginWithLocation : LoginWithMessages {
    public string Location {get; set;}
}

然后您的方法签名将是:

public static void L(LoginWithMessages loginMessage)

public static void L(LoginWithLocation loginLocation)