阅读按钮C#的标签时如何避免NRE

时间:2016-07-17 04:00:55

标签: c# nullreferenceexception

(因沮丧而抽泣)

在这种情况下,你如何避免烦恼的NRE?代码的输出是正确的,但我希望摆脱NRE。

背景:

表格上有一些按钮,其中一些代表教室的座位。其他按钮无关紧要,因为我只需要座位按钮,只有座位按钮有标签才有价值。

所以,我遍历所有按钮并读取它们的标签,如果它不是空的,那么将该按钮保留在列表中。其余的都被忽略了。

但是,当代码运行时,NRE会弹出第四行,该行以&#34开头;尝试"。

foreach (Button seatbutton in this.Controls)
 {
   string betta;
   try { betta = seatbutton.Tag.ToString(); }
   catch { betta = ""; }

   if (!string.IsNullOrEmpty(betta))
    {
     seatbuttons.Add(seatbutton);
    }
 }

这是我的代码中此类NRE的最简单,最直接的示例。还有几个。

我在网上搜索过,大多数回复都属于以下几行:"糟糕的编码习惯导致了这种情况。"

正如你可能会说的那样,我在整个事情上都很陌生,而且还没有时间养成习惯。你们能帮忙吗?也许有一些GOOD编码习惯的提示?

T_T谢谢!

1 个答案:

答案 0 :(得分:0)

在调用tag方法之前,您需要检查null是否为ToString()。像这样:

string betta = seatbutton.Tag == null ? "" : seatbutton.Tag.ToString();
if (betta == "") {
  seatbuttons.Add(seatbutton);
}

如果您正在使用最新的VS / C#,那么您也可以使用新的运营商:

string betta = seatbutton.Tag?.ToString();
if (!string.IsNullOrEmpty(betta)) {
  seatbuttons.Add(seatbutton);
}
相关问题