-2

言い換えれば:これは可能ですか?

public void ShowMessage(string cultureKeyText, string cultureKeyTitle = null, params string[] fields)

コンマ区切りリストを使用して呼び出す場合。2 番目のパラメーターが実際に 2 番目のパラメーターであるか、3 番目のパラメーターのコンマ区切りリストの 1 番目であるかをどのように知ることができますか?

編集:そして、オーバーロードは本当にそれを解決しますか:

 public void ShowError(string cultureKeyText, string cultureKeyCaption);
 public void ShowError(string cultureKeyText, params string[] fields);
 public void ShowError(string cultureKeyText, string cultureKeyCaption, params string[] fields) 

今、ShowError("First", "Some"); を呼び出した場合

Some が 1 番目または 2 番目のメソッドの呼び出しであるかどうかをどのように知ることができますか?

4

3 に答える 3

1

2番目のパラメーターが実際に2番目のパラメーターであるか、3番目のパラメーターのコンマ区切りリストの1番目であるかをどのように知ることができますか

このようにメソッドを呼び出すと

 ShowMessage("1","2", "3", "4", "5" );

その場合、 2 は と見なされcultureKeyTitleます。ただし、オプションのパラメーターをスキップする場合は、次のようにする必要があります

parameter name割り当てようとしている を指定するとcultureKeyTitle、 にデフォルト値が割り当てられます

ShowMessage("", fields: new[] { "", "", "" }); //call
于 2013-08-22T15:14:49.457 に答える
1

はい、提供されたメソッドは正しくコンパイルおよび実行されます。有効なコードです。

で呼び出すと、フィールドの最初のパラメーターではなく、パラメーターとしてShowMessage("1", "2", "3");解釈されます。2cultureKeyTitleparams

他のオプション引数と同様に、特定のパラメーターに値を指定する前に、以前のすべてのオプション引数に値を指定する必要があります (名前付きパラメーターを使用しない場合)。

「2」と「3」がフィールドへの 2 つの引数であり、それがオプションの引数を使用することを指定したい場合は、「通常の」呼び出しを使用して起こることの代わりに、次のように名前付きパラメーターを使用する必要があります。paramscultureKeyTitle

ShowMessage("1", fields: new[] { "2", "3" });
于 2013-08-22T15:28:24.387 に答える