2012-02-08 21 views

回答

2

异常不是由Convert.ToString()造成的。

由于您试图从空引用中获取LastName的值,因此代码中存在异常。这会导致运行时异常。

要修复它,您需要检查Name是否为空,然后再尝试访问LastName

var name = Name != null ? Convert.ToString(Name.LastName) : null; 
+0

感谢....虽然,我用var name = Name!= null? Convert.ToString(Name.LastName):“”; – 2012-02-08 22:38:45

+0

这个答案是错误的。看[这个问题](http:// stackoverflow。com/questions/10355736/why-does-convert-tostringnull -return-a-different-value-if-you-cast-null),原因是:因为即使Name不为null,如果Lastname为null,结果也会为空。 – shipr 2015-08-22 04:56:12

+0

@shipr这与上面提到的问题无关。我的回答解决了原来的问题 - 导致运行时NullReferenceException的原因。 – 2015-09-01 14:37:52

9

这与Convert.ToString无关。您正试图通过空引用访问LastName。这是一个运行时异常。

NameLastName都可以为空。如果Name为空,则Convert.ToString将永远不会在上面的代码中调用。

+0

+1为空检查 – deltree 2012-02-08 22:23:56

+0

处理此问题的最佳方法是什么? – 2012-02-08 22:24:02

+0

检查名称是否为空。 – 2012-02-08 22:24:40

1

在这种情况下,当C#评估Name.LastName时,它会崩溃。这是因为你真的在评估Null.LastName,这是没有意义的。 Conver.ToString(空),将工作。

2

Name为空时,您无法访问null的.LastName。

var name = Convert.ToString((Name != null) ? Name.LastName : ""); 
1

书面,你的代码说要做到以下几点:

  1. 找对象Name在内存中。
  2. 找对象的LastNameName
  3. 传递Name.LastName领域的Convert.ToString方法
  4. 分配结果name

在步骤2中你的代码没有因为Name为空,有没有Name.LastName字段可用,所以你永远不会让它到第3步。因此,Convert.ToString是否正确处理空参数并不重要,因为NullReferenceException在您甚至称为之前被抛出。

相关问题