C# 将单选按钮转换为字符

C# 将单选按钮转换为字符,c#,winforms,linq,radio-button,C#,Winforms,Linq,Radio Button,我有三个单选按钮。请看图片 我定义了一个变量 char temp; 我想要的是 如果选择“男性”,则 temp = "M"; 如果选择“女性”,则 temp = "F"; temp = "B". 如果选择了“两者”,则 temp = "F"; temp = "B". 我未完成的代码: temp = Convert.ToChar(this.Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked));

我有三个单选按钮。请看图片

我定义了一个变量

char temp;
我想要的是

如果选择“男性”,则

temp = "M";
如果选择“女性”,则

temp = "F";
temp = "B".
如果选择了“两者”,则

temp = "F";
temp = "B".
我未完成的代码:

temp = Convert.ToChar(this.Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked));
temp=Convert.ToChar(this.Controls.OfType().FirstOrDefault(r=>r.Checked));
谢谢你的建议

编辑: 控件位于一个组框中。在调试模式下。我犯了个错误

?groupBox4.控件的类型() {System.Linq.Enumerable.OfTypeIterator} 来源:空 及 ?groupBox4.Controls.OfType().FirstOrDefault(r=>r.Checked).Text 表达式不能包含lambda表达式

编辑2: 请看图片。运行代码以获取异常。
如果我理解正确,那么这是基于您(不推荐)的假设,即每个单选按钮的名称都以不同的字母开头

temp = Convert.ToChar(this.Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked).Name.Substring(0, 1));
temp=Convert.ToChar(this.Controls.OfType().FirstOrDefault(r=>r.Checked).Name.Substring(0,1));
编辑: 相同的假设,但基于Text属性而不是Name属性

temp=Convert.ToChar(this.Controls.OfType().FirstOrDefault(r=>r.Checked).Text.Substring(0,1));
Edit2:(基于OPs编辑-检查是否存在选中的单选按钮):

RadioButton rb=this.Controls.OfType().FirstOrDefault(r=>r.Checked);
如果(rb!=null)
{
temp=rb.Text[0];
}

如果我理解正确,那么这是基于您(不推荐)的假设,即每个单选按钮的名称以不同的字母开头

temp = Convert.ToChar(this.Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked).Name.Substring(0, 1));
temp=Convert.ToChar(this.Controls.OfType().FirstOrDefault(r=>r.Checked).Name.Substring(0,1));
编辑: 相同的假设,但基于Text属性而不是Name属性

temp=Convert.ToChar(this.Controls.OfType().FirstOrDefault(r=>r.Checked).Text.Substring(0,1));
Edit2:(基于OPs编辑-检查是否存在选中的单选按钮):

RadioButton rb=this.Controls.OfType().FirstOrDefault(r=>r.Checked);
如果(rb!=null)
{
temp=rb.Text[0];
}
它应该是:

Controls.OfType<RadioButton>().Where(r => r.Checked).FirstOrDefault();
Controls.OfType().Where(r=>r.Checked).FirstOrDefault();
它应该是:

Controls.OfType<RadioButton>().Where(r => r.Checked).FirstOrDefault();
Controls.OfType().Where(r=>r.Checked).FirstOrDefault();

您还可以设置
标记
属性并检索该属性。这是windows窗体应用程序。没有客户ID。对不起。@Love那么你可以用Name代替ClientId。。。(更新了代码)。文本选项将在两个项目中都起作用。正如我所说的,我仍然不确定这是否正是您所需要的…您应该进一步限制为仅限于GroupBox中的控件,否则您将在整个表单上找到第一个选中的单选按钮(这可能是完全不同的)。另外,请确保检查是否实际选中了单选按钮,否则您将得到一个调用
Text
grpGender.Controls.OfType().FirstOrDefault(r=>r.checked)
@Love的空引用异常。在我编写的代码上,您得到了那个错误吗?请使用更新的代码更新您的问题。您还可以设置
标记
属性并检索该属性。这是windows窗体应用程序。没有客户ID。对不起。@Love那么你可以用Name代替ClientId。。。(更新了代码)。文本选项将在两个项目中都起作用。正如我所说的,我仍然不确定这是否正是您所需要的…您应该进一步限制为仅限于GroupBox中的控件,否则您将在整个表单上找到第一个选中的单选按钮(这可能是完全不同的)。另外,请确保检查是否实际选中了单选按钮,否则您将得到一个调用
Text
grpGender.Controls.OfType().FirstOrDefault(r=>r.checked)
@Love的空引用异常。在我编写的代码上,您得到了那个错误吗?请使用更新的代码更新您的问题
this.Controls.OfType().FirstOrDefault(r=>r.Checked).Text[0]
@Love-当您说“在调试模式下”时,您是指调试窗口(立即?输出?)之一,还是刚刚收到异常?查看是否不能在即时窗口中使用Lambda表达式(请参阅我在上面的评论中添加的链接)。但我不明白为什么这对你的问题或答案有任何影响。。。运行代码而不尝试在即时窗口中处理它,并检查它是否工作。我猜它是在没有选中单选按钮的情况下发生的?我更新了下面的答案……我确实检查了一个按钮,但我发现rb=null。这意味着代码中有错误。可能是FirstOrDefault???
this.Controls.OfType().FirstOrDefault(r=>r.Checked).Text[0]
@Love-当你说“在调试模式下”时,你是指调试窗口之一(立即?输出?),还是只是得到一个异常?查看是否不能在即时窗口中使用Lambda表达式(请参阅我在上面的评论中添加的链接)。但我不明白为什么这对你的问题或答案有任何影响。。。运行代码而不尝试在即时窗口中处理它,并检查它是否工作。我猜它是在没有选中单选按钮的情况下发生的?我更新了下面的答案……我确实检查了一个按钮,但我发现rb=null。这意味着代码中有错误。也许是第一个默认值???