【问题标题】:Get the tag name of a checked RadioButton获取选中的 RadioButton 的标签名称
【发布时间】:2012-07-27 21:41:41
【问题描述】:

我有一组 RadioButtons,每个 RadioButtons 都有一个标签名称。 我想得到它。如果没有选择 RadioButton,则它为空。我只完成了一部分。

string sGender = 
    groupBox4.Controls.OfType<RadioButton>().Where(r => r.Checked)
        .FirstOrDefault().Tag.ToString();

更新

如果没有选中按钮,可能会出现异常。

【问题讨论】:

  • 那么你想要的结果是什么?您想要选中的 RadioButtons 中的所有 Tags(例如由 , 连接)还是只想要一个?你有例外吗?
  • 我不想使用 if else 语句来避免异常,因为它很复杂。我想用一行代码完成所有。
  • 为什么使用 if..else 复杂?它是最简单的代码结构之一,您可能使用的其他任何东西都可能更糟......

标签: c# linq c#-4.0 radio-button


【解决方案1】:

问题到底是什么?这里有错误吗?它是什么,在哪里?您需要确保尽可能清晰准确地指定您的问题。

虽然 .FirstOrDefault() 可以返回 null,但我猜想你在那里遇到了 null 引用异常。在继续之前,您需要检查一下...

string sGender;
var radioButton = groupBox4.Controls.OfType<RadioButton>()
                    .Where(r => r.Checked).FirstOrDefault();
if (radioButton == null)
{
    sGender = "";
}
else
{
    sGender = radioButton.Tag.ToString()
}

既然你已经问过了,你可以使用三元运算符来避免使用 if 一词。在任何实际意义上,这仍然是一个有效的 if 语句。您可以使用它来替换我上面给出的 if 语句,或者如果您真的不顾一切,您可以做一个衬里......我真的会选择最可读的,因为其他选项真的不会添加任何东西并且会失去可读性...

string sGender = groupBox4.Controls.OfType<RadioButton>().Any(r => r.Checked)?
    groupBox4.Controls.OfType<RadioButton>().Where(r => r.Checked)
        .First().Tag.ToString(): "";

【讨论】:

  • 我只是想知道我们可以使用一行简洁的代码而不是使用 if else 语句吗?
  • 基本问题是你想从一个对象中获取一个属性,但前提是该对象存在。您将需要在某处使用 if 语句。如果你愿意,你可以将它隐藏在三元运算符中,但这只是一个 if 。你为什么不直接使用 if 呢?
  • 是的,我们可以在这里使用三元吗?
  • 当然可以,但就可读性而言,它比我上面发布的版本要复杂得多。我会用三元编辑它只是因为你问...
  • 好的。也请保留旧版本。
猜你喜欢
  • 2011-07-17
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多