对象的方法调用不会抛出异常

时间:2012-11-22 13:40:42

标签: c# asp.net .net

这些天我遇到了many strange scenarios: - )

我在ASP.Net应用程序中测试了以下两个代码。代码1抛出异常(如预期的那样),而当字符串值为null时,代码2不会抛出异常(与期望相反)。

  1. 为什么“ EVAL ”在这种情况下不会抛出异常?
  2. EVAL的工作总是这样(即“没有例外”)或者只是运气吗?
  3. 是否有任何MSDN引用说'Eval'返回空字符串?
  4. // 代码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)  %>
    

    参考

    1. Eval check for DBNull doesnt work
    2. Convert.ToString behaves differently for "NULL object" and "NULL string"
    3. Datatype returned varies based on data in table

2 个答案:

答案 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,在这种情况下你不会得到异常。