日期:2014-05-17  浏览次数:20683 次

发帖问问题,问出新问题了,版主给的代码看不懂(好像是超级简单的常识),请高手指教!
我发帖问选择题中,单选按钮选中问题时,版主给我了这么两行代码:
var rb = groupBox1.Controls.OfType<RadioButton>().SingleOrDefault(x => x.Checked);
textBox3.Text = "正确答案是:" + chuandishuju.daan.Trim() + "     回答"+(rb != null && rb.Name.Last() - '1' == chuandishuju.daan.ToUpper().Trim().First() - 'A')?"正确!":"错误!" ;
现在大体意思知道了,但是里面具体代码什么意思不懂。不懂的是:
groupBox1.Controls.OfType<RadioButton>().SingleOrDefault(x => x.Checked)和
rb != null && rb.Name.Last() - '1' == chuandishuju.daan.ToUpper().Trim().First() - 'A'。
为什么这么写?
如果有相关资料的链接,请给一个。我虽然也是学计算机的,但是已经多年没编程了,当年就没学好,也没学过c#,只能靠以前学的c和c++基础自己摸索,所以各位还是把我当小白看吧。谢谢。
c#

------解决方案--------------------
groupBox1.Controls.OfType<RadioButton>().SingleOrDefault(x => x.Checked)

groupBox1.Controls.OfType<RadioButton>()返回groupBox1中的所有RadioButton
SingleOrDefault从中找出1个或0个满足条件:x => x.Checked,即选中的那个。
这个表达式返回一个RadioButton(找到)或者返回null(找不到),如果有多个满足条件,则丢出异常。
if (rb != null && rb.Name.Last() - '1' == chuandishuju.daan.ToUpper().Trim().First() - 'A')
如果找到(rb != null)并且
找到的那个的名字的最后一个字母的ascii值减去'1'的ascii值(rb.Name.Last() - '1')等于
答案的那个字母的ascii值减去'A'(chuandishuju.daan.ToUpper().Trim().First() - 'A')
那么答对了。
我们看ASCII表:
'4' - '1' = 'D' - 'A' = 3
'3' - '1' = 'C' - 'A' = 2
'2' - '1' = 'B' - 'A' = 1
'1' - '1' = 'A' - 'A' = 0