如何在读取按钮 C# 的标签时避免 NRE
How to avoid NRE when reading the tag of a button C#
(沮丧地抽泣)
在这种情况下,您如何避免恼人的 NRE?代码的输出是正确的,但我希望去掉 NRE。
背景:
表格上有一些按钮,其中一些代表教室的座位。其他按钮无关紧要,因为我只需要座位按钮,而且只有座位按钮具有有价值的标签。
因此,我遍历所有按钮并读取它们的标签,如果它不为空,则将该按钮保留在列表中。其余忽略不计。
但是当代码为运行时,在第四行,"try"开始的那一行,弹出NRE。
foreach (Button seatbutton in this.Controls)
{
string betta;
try { betta = seatbutton.Tag.ToString(); }
catch { betta = ""; }
if (!string.IsNullOrEmpty(betta))
{
seatbuttons.Add(seatbutton);
}
}
这是我的代码中此类 NRE 的最短、最直接的示例。还有好几个。
我在网上搜索过,大多数回复都是这样的:"Bad coding habits caused this."
您可能会说,我对这整件事还很陌生,甚至还没有时间养成习惯。你们能帮忙吗?也许有一些关于良好编码习惯的提示?
T_T谢谢!
在调用 ToString()
方法之前,您需要检查 tag
是否为 null
。像这样:
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);
}
(沮丧地抽泣)
在这种情况下,您如何避免恼人的 NRE?代码的输出是正确的,但我希望去掉 NRE。
背景:
表格上有一些按钮,其中一些代表教室的座位。其他按钮无关紧要,因为我只需要座位按钮,而且只有座位按钮具有有价值的标签。
因此,我遍历所有按钮并读取它们的标签,如果它不为空,则将该按钮保留在列表中。其余忽略不计。
但是当代码为运行时,在第四行,"try"开始的那一行,弹出NRE。
foreach (Button seatbutton in this.Controls)
{
string betta;
try { betta = seatbutton.Tag.ToString(); }
catch { betta = ""; }
if (!string.IsNullOrEmpty(betta))
{
seatbuttons.Add(seatbutton);
}
}
这是我的代码中此类 NRE 的最短、最直接的示例。还有好几个。
我在网上搜索过,大多数回复都是这样的:"Bad coding habits caused this."
您可能会说,我对这整件事还很陌生,甚至还没有时间养成习惯。你们能帮忙吗?也许有一些关于良好编码习惯的提示?
T_T谢谢!
在调用 ToString()
方法之前,您需要检查 tag
是否为 null
。像这样:
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);
}