C# 我如何优化此if语句
我终于完成了我的项目,我正在检查我的代码,并对其进行优化,试图减少代码的粗行,我该如何优化它,它是一系列与文本匹配的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) {
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
}
}
}