这些天我遇到了很多奇怪的场景 :-)
我在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);
Run Code Online (Sandbox Code Playgroud)
// 代码2:不抛出异常
<%# Convert.ToString(Eval("EncryptedSSN")).Substring(0, Convert.ToString(Eval("EncryptedSSN")).Length >= 5 ? 5 : Convert.ToString(Eval("EncryptedSSN")).Length) %>
Run Code Online (Sandbox Code Playgroud)
参考文献:
您的方案似乎不正确.第一个在.NET 4上没有给我一个例外:
object foo = null;
string test = Convert.ToString(foo).Substring(0, Convert.ToString(foo).Length >= 5 ? 5 : Convert.ToString(foo).Length);
Run Code Online (Sandbox Code Playgroud)
这是因为Convert.ToString() 返回"值的字符串表示形式,如果值为null则返回String.Empty".
String.Empty不为null,它是一个长度为0的字符串,因此在调用方法时不会抛出异常.
一些搜索引导我进入这个页面,一般解释ASP中的数据绑定,并解释说"在运行时,Eval方法调用DataBinder对象的Eval方法".DataBinder.Eval()返回一个对象,因此Convert.ToString(Eval(Something))至少会返回String.Empty,因此如果您尝试访问其结果的成员或属性,则不会抛出NullReferenceException.
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |