2017-01-30 3 views
0

私は自分自身でログプラグインを作成しようとしていますが、別のパラメータでオーバーロードする方法があります。
キーは、複数の文字列を追加することが可能である必要があります。これを別の行に印刷します。私はparamsを使用するというアイデアが好きです。毎回string[] { strings here }を追加する必要はありません。C#メソッドのオーバーロードが文字列argsを使用するときに間違ったメソッドを呼び出しています

私が現在持っている問題は、Log.L()メソッドが最初のトリガではなく、2番目の方法であることが合理的であるということです。

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で、ちょうど2番目のオーバーロードを使用することを想定します:

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

をあなたは、単に場所が利用できない場合にnullまたは空の文字列を渡すと、それに対処することができますメソッド。

0

2つのクラスを作成し、それらを使用して2つの過負荷を区別することができます。あなたが望むならば、あるクラスが他のクラスから継承するようにすることさえできます。

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) 
関連する問題