foreach (Control c in panPrev.Controls)
{
if (c.Tag == "move")
效果很好,但会产生警告:可能的意外参考比较;要进行值比较,请将左侧转换为“字符串”
foreach (Control c in panPrev.Controls)
{
if (c.Tag.ToString() == "move") // this produce NullReferenceException.
该怎么办?
您没有接受警告提供的建议。这将是:
if ((string)c.Tag == "move")
如果为空,这将正常工作Tag
,而尝试调用.ToString
可能的null
引用会使您遇到异常。
您完全需要这样做的原因是因为.Tag
它被声明为 an object
,因此==
在 anobject
和 a之间使用运算符string
使用引用相等,而将 astring
与 a进行比较使用定义string
的重载来比较实际值。==
string
Tag
是 type object
,这就是你收到警告的原因。如果您知道它是一个字符串并且它应该始终是一个字符串,那么您应该强制转换它(C 风格),因为如果Tag
不是字符串(但应该是),您将快速捕获错误。
c.Tag
是一个对象,所以 object == string 进行引用比较。
当然,Object 可以为 null,因此Tag.ToString()
在这种情况下调用可能会引发 null 引用异常。
您应该按照警告的建议进行操作,并Tag
转换为字符串:
if ((string)c.Tag == "move")