В чем разница между .ToString () и + "" - PullRequest
5 голосов
/ 07 декабря 2011

Если у меня есть DateTime, и у меня есть:

date.Year.ToString()

, я получаю год в виде строки.Но также, если я сделаю

date.Year + ""

, разница будет только в том, что второй не получит исключение, если нет даты?(который я предпочитаю)

Ответы [ 3 ]

10 голосов
/ 07 декабря 2011

Когда вы пишете date.Year + "", он будет скомпилирован как вызов string.Concat(object, object):

String.Concat(date.Year, "")

Внутри метод Concat будет вызывать ToString на каждом(ненулевой) объект.

Оба подхода выдают NullReferenceException, если date равно null.Но вы сказали, что date имеет тип DateTime.DateTime является структурой и поэтому не может быть нулевым.


Если date имеет тип DateTime? и вы хотите вернуть пустую строку, если дата равна нулю, вы можете использовать это:

date.HasValue ? date.Value.Year.ToString() : ""
4 голосов
/ 07 декабря 2011
date.Year.ToString()

Не будет работать, если дата равна нулю.

date.Year + ""

Работает, даже если год равен нулю, так как двоичный оператор + заменяет ноль пустой строкой.

Это то, чтоMSDN говорит о бинарном операторе +, объединяющем две строки:

Бинарный оператор + выполняет конкатенацию строк, когда один или оба операнда имеют тип string.Если операнд конкатенации строк равен нулю, подставляется пустая строка.В противном случае любой нестроковый аргумент преобразуется в его строковое представление, вызывая виртуальный метод ToString, унаследованный от объекта типа.Если ToString возвращает ноль, подставляется пустая строка.

Дополнительная информация о http://msdn.microsoft.com/en-us/library/aa691375%28VS.71%29.aspx

3 голосов
/ 07 декабря 2011

Нет разницы, если date.Year не равно нулю.

Во втором примере метод ToString() неявно вызывается для date.Year.

...