如何在读取按钮 C# 的标记时避免 NRE

本文关键字:NRE 读取 按钮 | 更新日期: 2023-09-27 17:57:22

(因沮丧而抽泣)

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

背景:

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

因此,我遍历所有按钮并读取它们的标签,如果它不为空,则将该按钮保留在列表中。其余部分将被忽略。

但是,当代码运行时,NRE 会在第四行弹出,即以"try"开头的行。

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

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

我在网上搜索过,大多数回复都是:"不良的编码习惯导致了这种情况。

正如你可能知道的,我对这整件事很陌生,甚至还没有时间养成习惯。你们能帮忙吗?也许有一些关于良好编码习惯的提示?

T_T谢谢!

如何在读取按钮 C# 的标记时避免 NRE

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

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

如果您使用的是最新的 VS/C#,则可以使用 new 运算符:

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