C# 对对象的方法调用不会引发异常
这些天我遇到了:-) 我已经在ASP.Net应用程序中测试了以下两个代码。当字符串值为null时,代码1抛出异常(如预期的那样),而代码2不抛出异常(与预期相反)C# 对对象的方法调用不会引发异常,c#,asp.net,.net,C#,Asp.net,.net,这些天我遇到了:-) 我已经在ASP.Net应用程序中测试了以下两个代码。当字符串值为null时,代码1抛出异常(如预期的那样),而代码2不抛出异常(与预期相反) 为什么在这种情况下“EVAL”不会引发异常 EVAL会一直这样工作(即“无例外”)还是只是运气 是否有任何MSDN引用表明“Eval”返回空字符串 //代码1:导致异常 string test = Convert.ToString(subscriber.EncryptedSSN).Substring(0, Convert.ToStr
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) %>
=5?5:Convert.ToString(Eval(“EncryptedSSN”).Length)%>
参考资料:
您的
评估结果是什么?可能是字符串。空的而不是空的,在这种情况下,你不会得到异常。你的求值是什么?可能是String.Empty
而不是null,在这种情况下,您不会得到异常。您的场景似乎不正确。第一个在.NET 4上对我来说并不例外:
object foo = null;
string test = Convert.ToString(foo).Substring(0, Convert.ToString(foo).Length >= 5 ? 5 : Convert.ToString(foo).Length);
这是因为Convert.ToString()
String.Empty不为null,它是长度为0的字符串,因此在对其调用方法时不会引发异常
通过一点搜索,我找到了一个示例,它解释了ASP中的数据绑定,并解释了“在运行时,Eval方法调用DataBinder对象的Eval方法”。返回一个对象,因此Convert.ToString(Eval(Something))
至少会返回String.Empty
,因此如果您试图访问其结果的成员或属性,则不会引发NullReferenceException。您的场景似乎不正确。第一个在.NET 4上对我来说并不例外:
object foo = null;
string test = Convert.ToString(foo).Substring(0, Convert.ToString(foo).Length >= 5 ? 5 : Convert.ToString(foo).Length);
这是因为Convert.ToString()
String.Empty不为null,它是长度为0的字符串,因此在对其调用方法时不会引发异常
通过一点搜索,我找到了一个示例,它解释了ASP中的数据绑定,并解释了“在运行时,Eval方法调用DataBinder对象的Eval方法”。返回一个对象,因此Convert.ToString(Eval(Something))
至少会返回String.Empty
,这样,如果您试图访问其结果的成员或属性,就不会引发NullReferenceException。如果您能想出一个较短的示例,这将非常有帮助—最好是在独立的控制台应用程序中。我不知道这里有什么Eval
。@JonSkeet我添加了ASP.Net标记并更新了问题我强烈认为Eval返回string.Empty
,而不是null
。如果你能想出一个简短的例子,那会很有帮助-最好是在独立的控制台应用程序中。我甚至不知道这里有什么…@JonSkeet我添加了ASP.Net标记并更新了问题我强烈假设Eval返回string.Empty
而不是null
。试着用“string foo”而不是“object foo”@Lijo这不是你所说的“奇怪场景”,它是:“Convert.ToString(string)”
返回指定的字符串实例;不执行实际转换”。如果您传递它null
,它将返回null
,因此将发生异常。既然您知道了这一点,我希望您能够了解为什么会发生NullReferenceException,您可以做些什么来防止它,以及为什么Eval()
one不会抛出异常(它必须返回非null字符串,或非字符串值或对象)。是否有任何MSDN引用说Eval
返回空字符串?请尝试使用“string foo”它不是您所说的“奇怪场景”的“object foo”@Lijo,而是:“Convert.ToString(String)
返回指定的字符串实例;不执行实际转换”。如果您传递它null
,它将返回null
,因此将发生异常。既然您知道了这一点,我希望您能够了解为什么会发生NullReferenceException,您可以做些什么来防止它,以及为什么Eval()
one不会抛出异常(它必须返回非null字符串,或非字符串值或对象)。是否有任何MSDN引用说Eval
返回空字符串?