这是场景......
if (entry.Properties["something"].Value != null)
attribs.something = entry.Properties["something"].Value.ToString();
Run Code Online (Sandbox Code Playgroud)
虽然有效且正常工作,但这看起来很难看.如果我在执行ToString()之前没有检查null,那么如果属性为null,则抛出异常.有没有更好的方法来处理这种情况?
非常感激!
selectedItem 有两个领域:
int? _coststring _serialNumber在这个例子中,_cost和_serialNumber的selectedItem都是空.我正在阅读通过selectedItem他们的属性的字段,并填写文本框与他们的值,当...
TextBox1.Text = selectedItem.Cost.ToString(); //no error
TextBox2.Text = selectedItem.SerialNumber.ToString(); //error
Run Code Online (Sandbox Code Playgroud)
我明白这SerialNumber.ToString()是多余的(因为它已经是一个字符串),但我不明白为什么这会导致这个异常:
可以为空的对象必须具有值.
int? _cost 可以为空,并且没有值,但它没有给我例外.string _serialNumber可以为空,并且没有值,但它确实给了我例外.这个问题触及它,这家伙基本上是在问同样的事情,但是没有指定的答案,而且它也没有解释为什么可以为空int?例如,我可以.ToString()在可空的int上使用但不能在空字符串上使用吗?
为什么第二个产生异常而第一个产生异常呢?
string s = null;
MessageBox.Show(s);
MessageBox.Show(s.ToString());
Run Code Online (Sandbox Code Playgroud)
更新 - 我能理解的异常,令人费解的一点(对我来说)是第一部分没有显示异常的原因.这与Messagebox没有任何关系,如下图所示.
例如:
string s = null, msg;
msg = "Message is " + s; //no error
msg = "Message is " + s.ToString(); //error
Run Code Online (Sandbox Code Playgroud)
第一部分似乎是隐式地将null转换为空字符串.
我有一个简单的类,ToString实现了我对内容感到满意.我试图通过查看各种选项是否有任何赞成/反对来决定什么是(最)正确的方法.
对于以下示例:
AstronautAstronaut:person我只是在这里选择雪球的选项:
string result = person == null ? "Unknown Astronaut" : person.ToString();string result = person.ToString() ?? "Unknown Astronaut";string result = (person ?? "Unknown Astronaut").ToString(); string result = person ?? (object)"Unknown Astronaut";我对这些的看法是
ToString感觉很难看,还担心ToString代码中的异常.string&Astronauttype不是同一类型,因此不能用于coalese.ToString应该person是null.综上所述: