5

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

我不习惯使用 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);
4

3 回答 3

5

您可以将两个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();

    .............
}
于 2013-02-25T22:03:03.053 回答
2

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

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") 以升序创建排序列表,调用 sort("desc") 以降序排序。并且没有代码重复:)

于 2013-02-25T22:02:41.430 回答
0

你基本上可以在这里使用函数式编程。将代码中更改为函数的部分抽象化。

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
}
于 2013-02-25T22:11:03.550 回答