2017-01-30 61 views
0

Я пытаюсь создать плагин журнала для себя, и я хочу иметь метод, в котором я перегружаю его различными параметрами.
Ключ в том, что необходимо добавить несколько строк, которые я буду печатать на разных строках. Мне нравится идея использования params, поэтому мне не нужно добавлять string[] { strings here } каждый раз.C# Перегрузка метода вызывает неправильный метод при использовании строковых аргументов

Проблема, которую я имею в настоящее время, заключается в том, что метод 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); 
    } 
} 
+3

Назовите методы по-разному. Никто не говорит, что у вас есть *, чтобы использовать перегрузку метода; это в основном для удобства. –

+0

Согласен, но с перегрузкой он выглядит намного лучше. Перед тем, как применить это, я хочу увидеть всплывающие окна других решений ^^ –

+2

Кстати ... 'L' - это не отличное имя метода. Что-то более описательное было бы намного лучше. –

ответ

0

Он всегда будет считать, что первая строка location так, просто использовать вторую перегрузку:

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

вы можете просто передать нулевой или пустую строку, если место не доступно, и справиться с ней в метод.

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)