代码之家  ›  专栏  ›  技术社区  ›  Momom0

读取按钮C#标签时如何避免NRE【重复】

  •  -3
  • Momom0  · 技术社区  · 10 年前

    (沮丧地抽泣)

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

    背景:

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

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

    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谢谢!

    1 回复  |  直到 10 年前
        1
  •  0
  •   Racil Hilan    10 年前

    您需要检查 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);
    }