优化下面代码:private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e) { if (e.Item.Checked == true) { RefreshSubIOList(e.Item, true); } else if (e.Item.Checked == false) { RefreshSubIOList(e.Item, false); } } delegate void RefreshSubIOListDelegate(ListViewItem lvt,bool sub); public void RefreshSubIOList(ListViewItem lvt,bool sub) { if (this.InvokeRequired == false) { refreshSubList(lvt,sub); } else { RefreshIOListDelegate refreshIOList = new RefreshIOListDelegate(RefreshIOList); this.BeginInvoke(refreshIOList, new object[] { lvt,sub }); } } public void refreshSubList(ListViewItem lvt,bool sub) { ListViewItem listViewItem = lvt; if(sub) { if (!listView2.Items.ContainsKey(lvt.SubItems[0].Text)) { listView2.Items.Add(listViewItem); } } else { if (listView2.Items.ContainsKey(lvt.SubItems[0].Text)) { listView2.Items.Remove(listViewItem); } } }
时间: 2024-02-10 07:08:18 浏览: 112
可以优化的地方有:
1. listView1_ItemChecked 方法中的 if 和 else if 判断可以简化为一个三元运算符,即:
```csharp
RefreshSubIOList(e.Item, e.Item.Checked);
```
2. RefreshSubIOList 方法可以直接将 refreshSubList 方法的实现放到其中,避免多余的方法调用和参数传递。
3. 可以将更新 listView2 的操作放到一个独立的方法中,避免在 RefreshSubIOList 中进行 UI 操作。
因此,优化后的代码如下:
```csharp
private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
RefreshSubIOList(e.Item, e.Item.Checked);
}
public void RefreshSubIOList(ListViewItem lvt, bool sub)
{
if (this.InvokeRequired)
{
this.BeginInvoke((Action)(() => RefreshSubIOList(lvt, sub)));
return;
}
if (sub)
{
AddToListView2(lvt);
}
else
{
RemoveFromListView2(lvt);
}
}
private void AddToListView2(ListViewItem lvt)
{
if (!listView2.Items.ContainsKey(lvt.SubItems[0].Text))
{
listView2.Items.Add(lvt);
}
}
private void RemoveFromListView2(ListViewItem lvt)
{
if (listView2.Items.ContainsKey(lvt.SubItems[0].Text))
{
listView2.Items.Remove(lvt);
}
}
```
在这份优化后的代码中,我们:
1. 用 lambda 表达式简化了 BeginInvoke 方法的调用。
2. 将 RefreshSubIOList 方法进行了简化,直接在其中实现了 refreshSubList 方法的功能。
3. 将更新 listView2 的操作放到了独立的方法中,增强了代码的可读性和可维护性。
阅读全文