Лучший способ обрабатывать нулевые исключения при конкатенации строки в C #? - PullRequest
2 голосов
/ 05 марта 2012

У меня есть эта строка кода, которая может выдавать нулевые исключения.

singleAddress.FullAddress = cc.MailingAddressStreet1.ToString() + " " +
   cc.MailingAddressCity.ToString() + " " +
   cc.MailingAddressState.ToString() + " " +
   cc.MailingAddressZip.ToString() + " " +
   cc.MailingAddressCountry.ToString();

Я знаю, что могу это исправить, добавив операторы if, чтобы проверить, является ли он пустым. Но есть ли лучший рекомендуемый способ сделать это?

Я просто хочу узнать, как лучше обрабатывать такие исключения (и не нужно писать больше кода, чем нужно). Заранее спасибо.

Ответы [ 4 ]

10 голосов
/ 05 марта 2012

Вы можете использовать метод String.Join :

if (cc != null)
{
    singleAddress.FullAddress = string.Join(" ",
        cc.MailingAddressStreet1,
        cc.MailingAddressCity,
        cc.MailingAddressState,
        cc.MailingAddressZip,
        cc.MailingAddressCountry);
}

Метод String.Join принимает переменное число object аргументов и вызывает метод Object.ToString для каждого аргумента, который не является null.

3 голосов
/ 05 марта 2012

Я бы, наверное, просто использовал string.Format:

singleAddress.FullAddress = string.Format("{0} {1} {2} {3} {4}",
    cc.MailingAddressStreet1, cc.MailingAddressCity, cc.MailingAddressState,
    cc.MailingAddressZip, cc.MailingAddressCountry);

NullReferenceExceptions были вызваны вызовом ToString - что произойдет в любом случае для ненулевых значений (даже в вашем исходном коде), и бессмысленно, если типы свойств уже string ...

3 голосов
/ 05 марта 2012

Метод String.Join кажется хорошим способом, но не забывайте об операторе объединения нулей, например,

var s = (cc.MailingAddressStreet1 ?? string.Empty) + ...

Я предполагаю, что cc.MailingAddressStreet1 уже является строкой.

Это дает вам возможность использовать альтернативную строку, когда строка пуста, например,

var s = (cc.MailingAddressStreet1 ?? "(n/a)") + ...

И не забывайте скобки:)

1 голос
/ 05 марта 2012

String.Concat должен работать

http://msdn.microsoft.com/en-us/library/system.string.concat.aspx

singleAddress.FullAddress = String.Concat(cc.MailingAddressStreet1.ToString(), 
                                        " ", cc.MailingAddressCity.ToString(), 
                                        " ", cc.MailingAddressState.ToString(),
                                        " ", cc.MailingAddressZip.ToString(),
                                        " ", cc.MailingAddressCountry.ToString());
...