Этот код не действителен:
private void Foo(string optionalString = string.Empty)
{
// do foo.
}
Но этот код:
private void Foo(string optionalString = "")
{
// do foo.
}
Почему? Поскольку string.Empty является полем только для чтения, а не константой, а значения по умолчанию для необязательных параметров должны быть константами времени компиляции.
Итак, на мой вопрос ... (хорошо, беспокойство)
Это то, что я ' Нам пришлось сделать:
private const string emptyString = "";
private void Foo(string optionalString = emptyString)
{
// do foo.
if (!string.IsNullOrEmpty(optionalString))
// etc
}
Как вы, ребята, обрабатываете необязательные строковые параметры?
Почему они не могут сделать String.Empty константой времени компиляции?
Ммм... что опять не так со строкой optionalParm = ""? Почему это плохо? Вы действительно думаете, что вам нужна символическая константа для пустой строки в этом случае? Как насчет этого тогда?
const int Zero = 0;
void SomeMethod(int optional = Zero) { }
Вам это кажется глупым?
С ними лучше всего работать следующим образом:
private void Foo(string optionalString = "")
{
// do foo.
}
Таким образом, вы не можете использовать String.Empty. Все узнают "", но если бы я нашел OptionalString = nullString
, я бы не знал, что и думать. Если ничего другого, назовите вещь emptyString
— это не null!