我在C#窗体中的事件处理程序的上下文中讨论,但我假设答案可以在C#中的任何地方使用。有没有办法在同一行中投射对象并访问其属性?
举一个例子,我有一个表单,它有许多复选框,每个按钮都激活一个按钮。该事件的CheckedChanged是一个函数,对于每个复选框非常相似的处理,它看起来是这样的现在:
private void acheckbox_CheckedChanged(object sender, EventArgs e)
{
int uniquetocheckbox = 12345;
if(acheckbox.CheckedChanged)
{
ThisFunction(uniquetocheckbox, true);
AssociatedButton.Enabled = true;
}
else
{
ThisFunction(uniquetocheckbox, false);
AssociatedButton.Enabled = false;
}
}
有很多的这些复选框,我试图削减和过去的代码对于每一个,并尽可能少的变化,所以我想要做这样的事情:
private void acheckbox_CheckedChanged(object sender, EventArgs e)
{
int uniquetocheckbox = 12345;
if((CheckBox)sender.Checked) //CHANGE HERE
{
ThisFunction(uniquetocheckbox, true);
AssociatedButton.Enabled = true;
}
else
{
ThisFunction(uniquetocheckbox, false);
AssociatedButton.Enabled = false;
}
}
这是行不通的。最简单的解决办法是这样的:
private void acheckbox_CheckedChanged(object sender, EventArgs e)
{
int uniquetocheckbox = 12345;
CheckBox cb = (CheckBox)sender;
if(cb.Checked) //CHANGE HERE
{
ThisFunction(uniquetocheckbox, true);
AssociatedButton.Enabled = true;
}
else
{
ThisFunction(uniquetocheckbox, false);
AssociatedButton.Enabled = false;
}
}
而是出于好奇纯我想知道是否有办法做到这一点像我给了第二个例子一行。我想知道,因为我认为它看起来更好,显然缩短了一行。
不('(CheckBox)sender).Checked'工作吗? – RBarryYoung
除了答案之外,还可以通过下面的方法缩短答案:var isChecked =((CheckBox)sender)。 ThisFunction(uniquetocheckbox,isChecked); AssociatedButton.Enabled = isChecked;' –
@MikeMcCaughan辉煌,甚至没有想到这一点。将实施这一点。 – SmashCode