我有一个字符串myString,它可以包含由逗号分隔的可变数量的对,例如:“a = 1,b = 2,c = 3”或“c = 5,b = 4”或“t = 12" 。 我还有一个集合整数变量,名为a,b,c,...,z,都设置为0。 我想分析myString并将字符串中的值分配给每个变量。 我只能使用switch和case来做一个效率低下的方法(例如,如果myString包含'a',则提取'a'的值并将其分配给名为'a'的变量)。有关如何为此操作编写更好代码的任何想法吗?
void Test(string myString)
{
int a, b, c, d;
a = b = c = d = 0;
string[] varNames = {"a", "b", "c", "d"};
for(int i = 0; i < varNames.Length; i++)
{
if(myString.IndexOf(varNames[i]) >= 0)
{
VariableWhoseNameIs(varNames[i]) = 3;
}
}
}
答案 0 :(得分:2)
为什么变量名称很重要?您可以将对存储在
中Dictionary<string, int>
Dictionary<string, int> values= new Dictionary<string, int>()
{
{ a, 1}
{ b, 2}
};
您想要检索的时间
var value = values[myString].value;
答案 1 :(得分:1)
你可以这样做:
void Test(string myString)
{
int a, b, c, d;
a = b = c = d = 0;
var assign = new Dictionary<string, Action<int>>()
{
{ "a", n => a = n },
{ "b", n => b = n },
{ "c", n => c = n },
{ "d", n => d = n },
};
string[] varNames = { "a", "b", "c", "d" };
for (int i = 0; i < varNames.Length; i++)
{
if (myString.IndexOf(varNames[i]) >= 0)
{
assign[varNames[i]](3);
}
}
}
但它仍然与案例陈述非常相似。唯一的区别是您在运行时构建分配,因此您可以更灵活地创建字典 - 即在代码中的多个位置构建。