Существуют ли необязательные аргументы без значений по умолчанию, которые могут «не существовать», если они не переданы / не указаны / не использованы?

#c# #.net

#c# #.net

Вопрос:

У меня есть метод

 public void Foo(String someString = "A String")
{
    Console.WriteLine(someString);
}
  

Это вызывается в другом методе

 // No arguments unless one is specifically passed when called
public void Bar(String anotherString = )
{
    Foo(anotherString);
}
  

Вероятно, вы уже можете сказать, что я пытаюсь здесь сделать, я бы хотел передавать строку только в том случае, если при вызове задается значение Bar() . Если аргумент не передан для Bar() , я бы хотел anotherString полностью опустить, чтобы Foo() вместо него использовались значения по умолчанию.

Есть ли способ сделать это?

Комментарии:

1. Все ли строковые значения допустимы для передачи Bar ? null Допустимо?

Ответ №1:

Используйте перегрузку:

 public void Foo(String someString = "A String")
{
    Console.WriteLine(someString);
}

public void Bar(String anotherString = "a")
{
    Foo(anotherString);
}

public void Bar()
{
    Foo();
}
  

Комментарии:

1. Это немного придирчиво, но подумайте о том, чтобы сделать строковый аргумент для первого Bar(string) метода необязательным. Если оставить это таким образом, это может сбить с толку будущего разработчика этого кода. Они могут задаться вопросом, какова могла быть цель значения по умолчанию "a" , и (ошибочно по желанию @Nomnom) измените перегрузку Bar() на вызов Foo("a"); .