我有一个带有 60 个单选按钮的 Win 窗体。我想使用以下代码从选中的单选按钮中获取文本:
private void button1_Click_1(object sender, EventArgs e)
{
string[] boxes = new string[30];
string[] names = new string[30];
for (int i = 1; i < boxes.Length; i++)
{
var label = this.Controls.Find("lb" + i, true)[0];
var panelcontr = this.Controls.Find("panel" + i, true)[0] as Panel;
var panels = panelcontr;
var p = panels.Controls.OfType<RadioButton>()
.FirstOrDefault(r => r.Checked).Text;
boxes[i] += p;
names[i] += label.Text;
tobeWritten += names[i] + boxes[i] + ",";
textBox1.Text = "Anamnese(" + tobeWritten + ")";
}
}
它工作得很好,但问题是,当只有一个单选框未选中时,我在调试期间收到警告。我知道为什么会出现警告,但我希望程序不要停止。
我要问的是:是否可以创建一个出现的 MessageBox,当我没有选中一个 radioButton 时,例如说“你必须分配每个按钮”。我单击“确定”按钮,然后我可以检查未检查的按钮。
我尝试了 an other question at StackOverflow 的建议但没有成功,因为函数 panels.Controls.OfType<RadioButton>()
在查询之前执行。
最佳答案
如果没有选中 RadioButton
,您将在此处得到一个 NullReferenceException
:
var p = panels.Controls.OfType<RadioButton>()
.FirstOrDefault(r => r.Checked).Text;
因为 FirstOrDefault
返回 null
因为 RadioButton
是引用类型。然后你不能访问它的 Text
属性。那么如何避免呢?
存储结果并在使用前检查它是否为null
:
RadioButton firstCheckedRadioButton = panels.Controls.OfType<RadioButton>()
.FirstOrDefault(r => r.Checked);
if(firstCheckedRadioButton != null)
{
string text = firstCheckedRadioButton.Text;
// ...
}
关于c# - 在执行 C# 之前检查 linq 操作是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33041740/