関数を使用してオプションのパラメーターを定義する


8

関数のオプションのパラメーターとして特定の値の代わりに関数の戻り値を使用することは可能ですか?たとえば、代わりに:

public void ExampleMethod(int a, int b, int c=10)
{
}

私のようなものが欲しい

private int ChangeC(int a, int b)
{
    return a+b;
}

public void ExampleMethod(int a, int b, int c=ChangeC(a,b))
{
}

4
いいえ、そのメソッドのパラメーターはそのコンテキストに存在しないためです。あなたはあなたのメソッドの最初の行でそれを使うことができます:c = c ?? ChangeC(a、b)
Glenn van Acker

疑似コードの例を挙げてください。あなたが達成したいことは少し不明確です。
Alex

三番目のパラメータとして関数呼び出しの結果を使用して最初のを呼び出す2と3つのパラメータ&1と1 -あなたは方法の2つのオーバーロードを持つことができます
PaulF

回答:


8

方法の1つ:

private int ChangeC(int a, int b)
{
    return a+b; 
} 

public void ExampleMethod(int a, int b, int? c=null)
{
    c = c ?? ChangeC(a,b);
}

16

いいえ、これは不可能です。パラメータをオプションにするためには、値はコンパイル時定数でなければなりません。ただし、次のようにメソッドをオーバーロードできます。

private int ChangeC(int a, int b){
    return a+b;
}

public void ExampleMethod(int a, int b, int c) {}

public void ExampleMethod(int a, int b)
{
    ExampleMethod(a, b, ChangeC(a, b));
}

3

関数のオプションのパラメーターとして特定の値の代わりに関数の戻り値を使用することは可能ですか?

いいえ、できません。オプションの引数に関するC#プログラミングガイドには、次のように書かれています。

デフォルト値は、次のタイプの式のいずれかである必要があります。

  • 定数式;

  • フォームの式new ValType()。ここで、ValType列挙型や構造体などの値の型です。

  • 形式の式。default(ValType)ここValTypeで、は値のタイプです。

代替ソリューションについては、他の回答を参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.