Почему существует перегрузка для String.Concat (), которая принимает один параметр в .NET - PullRequest
3 голосов
/ 28 августа 2009

Заметил это сегодня, когда был отправлен патч со следующей строкой:

lblCompletionTime.Text = String.Concat(trainingSkill.EndTime.ToLocalTime())

Я могу понять, почему автор использовал этот синтаксис, как в приведенной выше строке конкатенации двух строк для формирования строки даты / времени из нескольких частей.

Есть ли какая-то скрытая причина перегрузки одного параметра String.Concat () или она была включена для "полноты" разработчиками языка.

Я заменил строку на:

lblCompletionTime.Text = trainingSkill.EndTime.ToLocalTime().ToString(CultureInfo.CurrentCulture)

Который имеет тот же вывод.

Ответы [ 6 ]

10 голосов
/ 29 августа 2009

String.Concat (Object) дает вам String.Empty при передаче значения NULL; Сбой ToString с исключением нулевого указателя.

4 голосов
/ 29 августа 2009

Я согласен, что это не имеет особого смысла, особенно учитывая тот факт, что это реализация:

public static string Concat(object arg0)
{
        if (arg0 == null)
        {
                return Empty;
        }
        return arg0.ToString();
}

Но действительно подтверждает, что аргумент не null, так что я думаю, это что-то Тем не менее, вы ничего не объединяете, поэтому я думаю, что этот метод можно было бы назвать

String.ToStringSafe(Object obj) { } 

или что-то подобное, чтобы лучше выразить, что на самом деле делает функция.

3 голосов
/ 28 августа 2009

Согласно MSDN, String.Concat (объект)

Создает строковое представление указанный объект.

2 голосов
/ 29 августа 2009

Глядя на документацию String.Concat (объект), я вижу единственное преимущество в том, что он принимает нулевое значение и возвращает пустую строку, что может быть преимуществом по сравнению с object.ToString (), который выбрасывает NullReferenceException. В вашем примере это не помогает, потому что, если trainingSkill.EndTime равно нулю, программа будет прерываться при вызове ToLocalTime. Я предпочитаю ваше исправление, но я думаю, что нет необходимости передавать CultureInfo.CurrentCulture в качестве параметра, поскольку это поведение по умолчанию DateTime.ToString ()

1 голос
/ 29 августа 2009

В C # оно может иметь небольшое значение (кроме автоматической пустой строки для нулевого значения).

В целом, в .Net я мог бы использовать эту сигнатуру метода как очень полезную на функциональном языке.

0 голосов
/ 29 августа 2009

Использование String.Concat(Object) для преобразования объекта в строку - это поведение, для которого была разработана перегрузка функции.

Метод String.Concat (объект)
Создает строковое представление указанного объекта.

...