C# 我如何优化此if语句

C# 我如何优化此if语句,c#,C#,我终于完成了我的项目,我正在检查我的代码,并对其进行优化,试图减少代码的粗行,我该如何优化它,它是一系列与文本匹配的if语句,并为相应的文本框添加值 private void btnfinalize_Click(object sender, EventArgs e) { //Daily Sales for (int i = 0; i < POSDGV.Rows.Count; ++i) {

我终于完成了我的项目,我正在检查我的代码,并对其进行优化,试图减少代码的粗行,我该如何优化它,它是一系列与文本匹配的if语句,并为相应的文本框添加值

private void btnfinalize_Click(object sender, EventArgs e)
        {
            //Daily Sales
            for (int i = 0; i < POSDGV.Rows.Count; ++i)
            {
                if (POSDGV.Rows[i].Cells[0].Value.ToString() == "Manga vol 1-5 ")
                {
                    var Book1 = Int32.Parse(POSDGV.Rows[i].Cells[1].Value.ToString());
                    Global.Book1 = Book1 + Global.Book1;
                }
                else if (POSDGV.Rows[i].Cells[0].Value.ToString() == "Manga vol 6-15 ")
                {
                    var Book2 = Int32.Parse(POSDGV.Rows[i].Cells[1].Value.ToString());
                    Global.Book2 = Book2 + Global.Book2;
                }
                else if (POSDGV.Rows[i].Cells[0].Value.ToString() == "Novels 1-199 ")
                {
                    var Book3 = Int32.Parse(POSDGV.Rows[i].Cells[1].Value.ToString());
                    Global.Book3 = Book3 + Global.Book3;
                }
                else if (POSDGV.Rows[i].Cells[0].Value.ToString() == "Novels 200-400 ")
                {
                    var Book4 = Int32.Parse(POSDGV.Rows[i].Cells[1].Value.ToString());
                    Global.Book4 = Book4 + Global.Book4;
                }
                else if (POSDGV.Rows[i].Cells[0].Value.ToString() == "Comics series mainstream ")
                {
                    var Book5 = Int32.Parse(POSDGV.Rows[i].Cells[1].Value.ToString());
                    Global.Book5 = Book5 + Global.Book5;
                }
                else if (POSDGV.Rows[i].Cells[0].Value.ToString() == "Comics series secondary ")
                {
                    var Book6 = Int32.Parse(POSDGV.Rows[i].Cells[1].Value.ToString());
                    Global.Book6 = Book6 + Global.Book6;
                }
                else if (POSDGV.Rows[i].Cells[0].Value.ToString() == "Text book 1 semester/2 modules ")
                {
                    var Book7 = Int32.Parse(POSDGV.Rows[i].Cells[1].Value.ToString());
                    Global.Book7 = Book7 + Global.Book7;
                }
                else if (POSDGV.Rows[i].Cells[0].Value.ToString() == "Text book module add-ons ")
                {
                    var Book8 = Int32.Parse(POSDGV.Rows[i].Cells[1].Value.ToString());
                    Global.Book8 = Book8 + Global.Book8;
                }
                else if (POSDGV.Rows[i].Cells[0].Value.ToString() == "Hardcover ")
                {
                    var Hardcover = Int32.Parse(POSDGV.Rows[i].Cells[1].Value.ToString());
                    Global.Hardcover = Hardcover + Global.Hardcover;
                }
            }
private void btnfinalize\u单击(对象发送者,事件参数e)
{
//日销售额
对于(int i=0;i
thx以获取帮助

私人作废b最终确认\u单击(对象发送者,事件参数e)
    private void btnfinalize_Click(object sender, EventArgs e)
{
    //Daily Sales
    for (int i = 0; i < POSDGV.Rows.Count; ++i)
    {
        string str1 = POSDGV.Rows[i].Cells[0].Value.ToString();
        string str2 = POSDGV.Rows[i].Cells[1].Value.ToString();

        var Book = Int32.Parse(str2);

        if (str1 == "Manga vol 1-5 ")
        {
            Global.Book1 = Book + Global.Book1;
        }
        else if (str1 == "Manga vol 6-15 ")
        {
            Global.Book2 = Book + Global.Book2;
        }
        else if (str1 == "Novels 1-199 ")
        {
            Global.Book3 = Book + Global.Book3;
        }
        else if (str1 == "Novels 200-400 ")
        {
            Global.Book4 = Book + Global.Book4;
        }
        else if (str1 == "Comics series mainstream ")
        {
            Global.Book5 = Book + Global.Book5;
        }
        else if (str1 == "Comics series secondary ")
        {
            Global.Book6 = Book + Global.Book6;
        }
        else if (str1 == "Text book 1 semester/2 modules ")
        {
            Global.Book7 = Book + Global.Book7;
        }
        else if (str1 == "Text book module add-ons ")
        {
            Global.Book8 = Book + Global.Book8;
        }
        else if (str1 == "Hardcover ")
        {
            var Hardcover = Int32.Parse(str2);
            Global.Hardcover = Hardcover + Global.Hardcover;
        }
    }
}
{ //日销售额 对于(int i=0;i
使用变量将减少代码中的字符数。您还可以尝试使用枚举,以便使用开关大小写。

使用字典:

var actions = new Dictionary<string, Action<int>>
{
    ["Manga vol 1-5 "] = book => Global.Book1 += book,
    ["Manga vol 6-15 "] = book => Global.Book2 += book
    //...
};

您还可以将switch与字符串一起使用

    private void btnfinalize_Click(object sender, EventArgs e)
    {
        //Daily Sales
        for (int i = 0; i < POSDGV.Rows.Count; ++i)
        {
            var value = POSDGV.Rows[i].Cells[0].Value.ToString();
            var book = Int32.Parse(POSDGV.Rows[i].Cells[1].Value.ToString());
            switch (value)
            {
                case "Manga vol 1-5 ":
                {
                    Global.Book1 = Book + Global.Book1;
                    break;
                }
                //other cases
            }
        }
    }

如果你想减少“大块的代码行”-然后,两位普通代码可以分配给循环顶部的局部变量。if语句可以用switch语句替换。就优化而言,编译器可能会这样做。我投票结束这个问题,因为它属于循环。哦,对不起,我不知道代码复查是件事,我会移动它 now@ZoharPeled这个问题在CodeReview上是离题的,因为它没有包含足够的上下文来被审查。另外,另一个站点的存在并不会改变离题的要求。换句话说:请始终在its中指向SO的离题规则,而不是指向其他站点。@ZoharPeled如果您没有看到离题的原因SO帮助中心的这类问题真的是离题了吗?另请参见。如果您认为问题太广泛或需要更多关注,那么,这两个都是非常有效的密切原因。由于str2总是转换为Int32-那么这可以在循环的顶部完成。您也可以在字符串上使用
开关
,您不必使用
enums
if(str=
应该是
if(str1=
),
str2
的初始化应该使用
单元格[1]
,而不是
单元格[0]
@PaulF str2也使用“i”,所以它不能在循环之外。@MatthewWatson是的。我的错
foreach (var row in POSDGV.Rows)
{
    var book = Int32.Parse(row.Cells[1].Value.ToString());
    var action = actions[row.Cells[0].Value.ToString()];
    action(book);
}
    private void btnfinalize_Click(object sender, EventArgs e)
    {
        //Daily Sales
        for (int i = 0; i < POSDGV.Rows.Count; ++i)
        {
            var value = POSDGV.Rows[i].Cells[0].Value.ToString();
            var book = Int32.Parse(POSDGV.Rows[i].Cells[1].Value.ToString());
            switch (value)
            {
                case "Manga vol 1-5 ":
                {
                    Global.Book1 = Book + Global.Book1;
                    break;
                }
                //other cases
            }
        }
    }
    private void btnfinalize_Click(object sender, EventArgs e)
    {
        //Daily Sales
        foreach (var row in POSDGV.Rows)
        {
            var value = row.Cells[0].Value.ToString();
            var book = Int32.Parse(row.Cells[1].Value.ToString());
            switch (value)
            {
                case "Manga vol 1-5 ":
                {
                    Global.Book1 = Book + Global.Book1;
                    break;
                }
                //other cases
            }
        }
    }