Используйте функцию для определения необязательного параметра - PullRequest
8 голосов
/ 11 декабря 2019

Можно ли использовать возвращаемое значение функции вместо определенного значения в качестве необязательного параметра в функции? Например вместо:

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))
{
}

Ответы [ 2 ]

16 голосов
/ 11 декабря 2019

Нет, это невозможно. Чтобы параметр был необязательным, значение должно быть постоянной времени компиляции. Однако вы можете перегрузить метод следующим образом:

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));
}
8 голосов
/ 11 декабря 2019

Один из способов:

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);
}
...