我在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