我正在创建一个方法来验证VIN号是否具有有效的校验和。有关流程的说明,请访问:http://en.wikipedia.org/wiki/Vehicle_identification_number#Transliterating_the_numbers
我遇到的问题是从原始数据(作为字符串发送,当前我正在操作char数组)转换为乘法的整数。我不能只将值转换为ASCII值并将它们修改为9,因为数字S到Z与其余数字不对齐。
现在我正在寻找一种温和有效的方法来做到这一点。我的第一个想法是转换声明,但这似乎过长了。接下来我想到的是字典,这似乎是一种非常有效的方法。正则表达式似乎对问题过于复杂,并且遇到了与switch语句几乎一样冗长的问题。
那么变量Dictionary vinDict是这样做的吗?我的直觉的一部分说,使用lambda语法有一种非常优雅的方法,但我不太了解它。
提前感谢您的帮助!
答案 0 :(得分:1)
switch语句和字典将提供大致相同的性能。假设你有类似的东西:
static Dictionary<char,int> CharToIntMap = new Dictionary<char,int>
{
{'0', 0}, {'1', 1}, ... {'S', 11}, {'Z'}, 12}
};
int val = CharToIntMap[c];
或者:
switch (c)
{
case '0' : val = 0; break;
case '1' : val = 1; break;
...
case 'S' : val = 11; break;
}
如果switch语句超过7种情况,编译器将创建一个字典。有关详细信息,请参阅https://stackoverflow.com/a/8530197/56778。
现在,看起来更好是一个偏好问题。我建议您编写自己的字典来进行映射。