比较警告与NullreferenceException

时间:2012-06-22 20:07:34

标签: c# winforms

foreach (Control c in panPrev.Controls)
{
if (c.Tag == "move")

效果很好,但会产生警告:可能的非预期参考比较;要获得值比较,请将左侧投射到“字符串”

foreach (Control c in panPrev.Controls)
{
if (c.Tag.ToString() == "move")  // this produce NullReferenceException.

怎么办?

3 个答案:

答案 0 :(得分:5)

您未接受警告提供的建议。这将是:

if ((string)c.Tag == "move")

这将在Tag为空的情况下正常工作,而尝试在可能的.ToString引用上调用null会打开您的异常。

您需要执行此操作的原因是因为.Tag被声明为object,因此在==和{{object之间使用string运算符1}}使用引用相等,而将stringstring进行比较则使用==中定义的string的重载,该重载用于比较实际值。

答案 1 :(得分:1)

Tag属于object类型,这就是您收到警告的原因。如果你知道它是一个字符串,它应该总是是一个字符串然后你应该把它(C样式),因为如果Tag不是一个字符串,你会很快发现错误(但应该定)。

答案 2 :(得分:1)

c.Tag是一个对象,因此object == string会进行参考比较。

当然,对象可以为null,因此在这种情况下调用Tag.ToString()会抛出空引用异常。

您应该按照警告的建议执行操作,并将Tag转换为字符串:

if ((string)c.Tag == "move")