foreach (Control c in panPrev.Controls)
{
if (c.Tag == "move")
效果很好,但会产生警告:可能的非预期参考比较;要获得值比较,请将左侧投射到“字符串”
foreach (Control c in panPrev.Controls)
{
if (c.Tag.ToString() == "move") // this produce NullReferenceException.
怎么办?
答案 0 :(得分:5)
您未接受警告提供的建议。这将是:
if ((string)c.Tag == "move")
这将在Tag
为空的情况下正常工作,而尝试在可能的.ToString
引用上调用null
会打开您的异常。
您需要执行此操作的原因是因为.Tag
被声明为object
,因此在==
和{{object
之间使用string
运算符1}}使用引用相等,而将string
与string
进行比较则使用==
中定义的string
的重载,该重载用于比较实际值。
答案 1 :(得分:1)
Tag
属于object
类型,这就是您收到警告的原因。如果你知道它是一个字符串,它应该总是是一个字符串然后你应该把它(C样式),因为如果Tag
不是一个字符串,你会很快发现错误(但应该定)。
答案 2 :(得分:1)
c.Tag
是一个对象,因此object == string会进行参考比较。
当然,对象可以为null,因此在这种情况下调用Tag.ToString()
会抛出空引用异常。
您应该按照警告的建议执行操作,并将Tag
转换为字符串:
if ((string)c.Tag == "move")