gpt4 book ai didi

c# - 如何让这段代码更干?

转载 作者:太空狗 更新时间:2023-10-29 18:11:03 24 4
gpt4 key购买 nike

假设我们有这些复选框:

  • FooCheckBox
  • 条形复选框
  • BazCheckBox

还有这些方法:

  • 酒吧
  • 巴兹

我只想在相应的复选框被选中时调用每个方法。代码可能如下所示:

void DoWork()
{
if (FooCheckBox.Checked)
{
Foo();
Console.WriteLine("Foo was called");
}

if (BarCheckBox.Checked)
{
Bar();
Console.WriteLine("Bar was called");
}

if (BazCheckBox.Checked)
{
Baz();
Console.WriteLine("Baz was called");
}
}

现在考虑一下,您有更多的东西,而不是 3 个复选框和 3 个方法。您将如何重写上面的代码以使其更加 DRY

最佳答案

我会说,对于您提出的案例,请保持原样;你不想在没有充分理由的情况下过度抽象,因为它会使代码库更难维护。当然,上下文很重要,这最终取决于判断。

也就是说,这是我处理这个问题的方法。创建一个集合,其中每个项目都包含控件和操作委托(delegate)。然后遍历并在每个项目上执行逻辑。

var items = new KeyValuePair<CheckBox, Action>[] {
new KeyValuePair<CheckBox,Action>(FooCheckBox, Foo),
new KeyValuePair<CheckBox,Action>(BarCheckBox, Bar),
new KeyValuePair<CheckBox,Action>(BazCheckBox, Baz)
};

foreach (var item in items)
{
if (item.Key.Checked)
{
item.Value.Invoke();
Console.WriteLine("Invoked " + item.Value.Method.Name);
}
}

或者(可能?)更好地使用 Linq:

items.Where(item => item.Key.Checked).ToList().ForEach(item => new {
item.Value.Invoke();
Console.WriteLine("Invoked " + item.Value.Method.Name);
});

关于c# - 如何让这段代码更干?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11173297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com