我有这行代码可以抛出空异常。
singleAddress.FullAddress = cc.MailingAddressStreet1.ToString() + " " +
cc.MailingAddressCity.ToString() + " " +
cc.MailingAddressState.ToString() + " " +
cc.MailingAddressZip.ToString() + " " +
cc.MailingAddressCountry.ToString();
我知道我可以通过添加if语句来检查它是否为null。但是有更好的推荐方法吗?
我只是想学习如何更好地处理这些异常(并且不必编写超出我需要的代码)。提前谢谢。
答案 0 :(得分:10)
您可以使用String.Join Method:
if (cc != null)
{
singleAddress.FullAddress = string.Join(" ",
cc.MailingAddressStreet1,
cc.MailingAddressCity,
cc.MailingAddressState,
cc.MailingAddressZip,
cc.MailingAddressCountry);
}
String.Join Method采用可变数量的object
个参数,并在每个非null
的参数上调用Object.ToString Method。
答案 1 :(得分:3)
String.Join
方法似乎是一种很好的方法,但不要忘记空合并运算符,例如
var s = (cc.MailingAddressStreet1 ?? string.Empty) + ...
我假设cc.MailingAddressStreet1
已经是一个字符串了。
这使您可以选择在字符串为空时使用替代字符串,例如
var s = (cc.MailingAddressStreet1 ?? "(n/a)") + ...
并且不要忘记括号:)
答案 2 :(得分:3)
我可能只是使用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 :(得分:1)
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());