当使用 long else if - C# 时,使用什么更好
Whats a better thing to use, when using long else if - C#
重构此代码以避免长嵌套 else if 语句的好方法是什么?这需要相当长的时间,所以最好将它变成一个更简单的函数。
下面是我的代码:
if (data == "Januar")
{
int cellnr = 1;
searchdata(row["CarNo"].ToString(), cellnr);
}
else if (data == "Februar")
{
int cellnr = 2;
searchdata(row["CarNo"].ToString(), cellnr);
}
else if (data == "Marts")
{
int cellnr = 3;
searchdata(row["CarNo"].ToString(), cellnr);
}
else if (data == "April")
{
int cellnr = 4;
searchdata(row["CarNo"].ToString(), cellnr);
}
else if (data == "Marts")
{
int cellnr = 5;
searchdata(row["CarNo"].ToString(), cellnr);
}
考虑改用 switch case
您应该创建一个静态 Dictionary<string, int>
将这些字符串映射到您想要的数字,然后只需在字典中查找 data
。
您可以使用 switch
语句,就像已经建议的那样,或者您可以创建一个字典:
Dictionary<string, int> mapping = new Dictionary<string, int>()
{
{"Januar", 1},
{"Februar", 2},
...
};
int cellnr = mapping[data];
您可以使用 switch
语句,但 IMO 仍然非常冗长,我更喜欢字典:
Dictionary<string, int> mapping = new Dictionary<string, int>()
{
{"Januar", 1},
{"Februar", 2},
{"Marts", 3},
{"April", 4},
};
searchdata(row["CarNo"].ToString(), mapping[data]);
考虑使用 Switch
语句以获得更好的可读性 luke
string data = somevariable;
switch (data)
{
case "Januar":
int cellnr = 1;
searchdata(row["CarNo"].ToString(), cellnr);
break;
case "Februar":
int cellnr = 2;
searchdata(row["CarNo"].ToString(), cellnr);
break;
case "Marcs":
int cellnr = 3;
searchdata(row["CarNo"].ToString(), cellnr);
break;
default:
break;
}
作为另一种选择,除了 Saeb 的主动回答之外,在你的情况下可能不需要字典,一个简单的列表就足够了,根据你自己的想法在评论中:思考可能制作一个数组,和检查该变量的数据变量,然后每次向 cellnr 计数 +1 - 但不太确定该怎么做。
代码:
var dataList = new List<string> { "Januar", "Februar", "Marts", "April" };
searchdata(row["CarNo"].ToString(), dataList.IndexOf(data) + 1);
好处:
- 比字典短。
- 如果键不存在于集合中,则字典方法会失败,但列表方法会简单地处理它,它将 0 值传递给您的方法,您可以在您的方法中处理 0。
Dictionary
的方式在这里肯定是非常合适的。然而,为了给腰带添加更多工具,另一种方法是使用 enum
:
// Setting January to 1 to match your setup. I used English month names, so
// you'd have to change that.
enum Months { January = 1, February, March, April, May, June,
July, August, September, October, November, December }
searchdata(row["CarNo"].ToString(), (int)Enum.Parse(typeof(Months), data));
这样您就不必担心任何类型的 switch
或 else-if
疯狂。
重构此代码以避免长嵌套 else if 语句的好方法是什么?这需要相当长的时间,所以最好将它变成一个更简单的函数。
下面是我的代码:
if (data == "Januar")
{
int cellnr = 1;
searchdata(row["CarNo"].ToString(), cellnr);
}
else if (data == "Februar")
{
int cellnr = 2;
searchdata(row["CarNo"].ToString(), cellnr);
}
else if (data == "Marts")
{
int cellnr = 3;
searchdata(row["CarNo"].ToString(), cellnr);
}
else if (data == "April")
{
int cellnr = 4;
searchdata(row["CarNo"].ToString(), cellnr);
}
else if (data == "Marts")
{
int cellnr = 5;
searchdata(row["CarNo"].ToString(), cellnr);
}
考虑改用 switch case
您应该创建一个静态 Dictionary<string, int>
将这些字符串映射到您想要的数字,然后只需在字典中查找 data
。
您可以使用 switch
语句,就像已经建议的那样,或者您可以创建一个字典:
Dictionary<string, int> mapping = new Dictionary<string, int>()
{
{"Januar", 1},
{"Februar", 2},
...
};
int cellnr = mapping[data];
您可以使用 switch
语句,但 IMO 仍然非常冗长,我更喜欢字典:
Dictionary<string, int> mapping = new Dictionary<string, int>()
{
{"Januar", 1},
{"Februar", 2},
{"Marts", 3},
{"April", 4},
};
searchdata(row["CarNo"].ToString(), mapping[data]);
考虑使用 Switch
语句以获得更好的可读性 luke
string data = somevariable;
switch (data)
{
case "Januar":
int cellnr = 1;
searchdata(row["CarNo"].ToString(), cellnr);
break;
case "Februar":
int cellnr = 2;
searchdata(row["CarNo"].ToString(), cellnr);
break;
case "Marcs":
int cellnr = 3;
searchdata(row["CarNo"].ToString(), cellnr);
break;
default:
break;
}
作为另一种选择,除了 Saeb 的主动回答之外,在你的情况下可能不需要字典,一个简单的列表就足够了,根据你自己的想法在评论中:思考可能制作一个数组,和检查该变量的数据变量,然后每次向 cellnr 计数 +1 - 但不太确定该怎么做。
代码:
var dataList = new List<string> { "Januar", "Februar", "Marts", "April" };
searchdata(row["CarNo"].ToString(), dataList.IndexOf(data) + 1);
好处:
- 比字典短。
- 如果键不存在于集合中,则字典方法会失败,但列表方法会简单地处理它,它将 0 值传递给您的方法,您可以在您的方法中处理 0。
Dictionary
的方式在这里肯定是非常合适的。然而,为了给腰带添加更多工具,另一种方法是使用 enum
:
// Setting January to 1 to match your setup. I used English month names, so
// you'd have to change that.
enum Months { January = 1, February, March, April, May, June,
July, August, September, October, November, December }
searchdata(row["CarNo"].ToString(), (int)Enum.Parse(typeof(Months), data));
这样您就不必担心任何类型的 switch
或 else-if
疯狂。