这些天我遇到了many strange scenarios: - )
我在ASP.Net应用程序中测试了以下两个代码。代码1抛出异常(如预期的那样),而当字符串值为null时,代码2不会抛出异常(与期望相反)。
// 代码1 :导致异常
string test = Convert.ToString(subscriber.EncryptedSSN).Substring(0, Convert.ToString(subscriber.EncryptedSSN).Length >= 5 ? 5 : Convert.ToString(subscriber.EncryptedSSN).Length);
// 代码2 :不会抛出异常
<%# Convert.ToString(Eval("EncryptedSSN")).Substring(0, Convert.ToString(Eval("EncryptedSSN")).Length >= 5 ? 5 : Convert.ToString(Eval("EncryptedSSN")).Length) %>
参考:
答案 0 :(得分:6)
您的方案似乎不正确。第一个在.NET 4上没有给我一个例外:
object foo = null;
string test = Convert.ToString(foo).Substring(0, Convert.ToString(foo).Length >= 5 ? 5 : Convert.ToString(foo).Length);
这是因为Convert.ToString()
returns "The string representation of value, or String.Empty if value is null"。
String.Empty不为null,它是一个长度为0的字符串,因此在调用方法时不会抛出异常。
一些搜索引导我this page,一般解释ASP中的数据绑定,并解释“在运行时,Eval方法调用DataBinder对象的Eval方法”。 DataBinder.Eval()
返回一个对象,因此Convert.ToString(Eval(Something))
至少会返回String.Empty
,因此如果您尝试访问其结果的成员或属性,则不会抛出NullReferenceException。
答案 1 :(得分:1)
您Eval
的评价是什么?也许它是String.Empty
而不是null,在这种情况下你不会得到异常。