构造按钮单击方法以避免代码重复

本文关键字:代码 按钮 单击 方法 | 更新日期: 2023-09-27 18:00:58

我有以下两个按钮单击方法,它们从三个TextBoxes创建一个数组,对值进行排序,将它们插入数据库,然后以相同的顺序选择值。这两个按钮之间的唯一区别是,一个按升序排列值,另一个按降序排列值。

我不习惯使用C#。有人能提出构建代码的最佳方法吗?这样我就不会为每个按钮重复了?通常我会写一个函数,让每个按钮传递参数。这是去这里的正确路吗?

提前谢谢。

按钮1

protected void Button1_Click(object sender, EventArgs e)
{
    var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text };
    var orderedlist = list.OrderBy(x => (x)).ToArray();

    SqlCommand cmd = new SqlCommand("Select * from lists order by values asc", conn);

按钮2

protected void Button2_Click(object sender, EventArgs e)
{
    var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text };
    var orderedlist = list.OrderByDescending(x => (x)).ToArray();

    SqlCommand cmd = new SqlCommand("Select * from lists order by values desc", conn);

构造按钮单击方法以避免代码重复

您可以将两个Button单击事件分配给同一个处理程序,并使用sender选择您想要的排序。

protected void Button_Click(object sender, EventArgs e)
{
    var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text };
    var orderedlist = (sender as Button).AccessKey  == "Button1" // or whatever name it is
                      ? list.OrderByDescending(x => (x)).ToArray()
                      : list.OrderBy(x => (x)).ToArray();
    .............
}

On选项将创建一个函数,排序:

public list sort(String order)
{
     var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text };
     var orderedlist = list.OrderByDescending(x => (x)).ToArray();
     ...
     SqlCommand cmd = new SqlCommand("Select * from lists order by values " + order, conn)
     ...
     return SortedList;
}

调用sort("asc"(以升序创建已排序列表,并调用排序("desc"(以降序排序。并且没有代码重复:(

您基本上可以在这里使用函数式编程。抽象代码中变为函数的部分。

protected void Button1_Click(object sender, EventArgs e)
{
    HelperFunction(list => list.OrderBy(x => x));
}
protected void Button2_Click(object sender, EventArgs e)
{
    HelperFunction(list => list.OrderByDescending(x => x));
}
private void HelperFunction(Func<IEnumerable<string>, <IEnumerable<string>> listOrderer)
{
    var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text };
    var orderedList = listOrderer(list).ToArray();
    // rest of code
}