#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");
.