如何解决不能从我的字典中获取要传递的值
| Dictionary<string,double> state = new Dictionary<string,double>(50);
state.Add(\"Alabama\",0.0570);
state.Add(\"Alaska\",0.1167);
state.Add(\"Arizona\",0.0592);
state.Add(\"Arkansas\",0.0835);
state.Add(\"California\",0.0739);
state.Add(\"Colorado\",0.0272);
state.Add(\"Connecticut\",0.06540);
state.Add(\"Delaware\",0.0825);
state.Add(\"Florida\",0.0503);
state.Add(\"Georgia\",0.0562);
state.Add(\"Hawaii\",0.0985);
state.Add(\"Idaho\",0.0736);
state.Add(\"Illinois\",0.0562);
state.Add(\"Indiana\",0.0648);
state.Add(\"Iowa\",0.0591);
state.Add(\"Kansas\",0.0654);
state.Add(\"Kentucky\",0.0734);
state.Add(\"Louisiana\",0.0685);
state.Add(\"Maine\",0.0770);
state.Add(\"Maryland\",0.0559);
state.Add(\"Massachusetts\",0.0630);
state.Add(\"Michigan\",0.0672);
state.Add(\"Minnesota\",0.0802);
state.Add(\"Mississippi\",0.0740);
state.Add(\"Missouri\",0.0517);
state.Add(\"Montana\",0.0708);
state.Add(\"Nebraska\",0.0610);
state.Add(\"Nevada\",0.0612);
state.Add(\"New Hampshire\",0.0387);
state.Add(\"New Jersey\",0.0661);
state.Add(\"New Mexico\",0.0826);
state.Add(\"New York\",0.0676);
state.Add(\"North Carolina\",0.0726);
state.Add(\"North Dakota\",0.0711);
state.Add(\"Ohio\",0.0609);
state.Add(\"Oklahoma\",0.0621);
state.Add(\"Oregon\",0.0576);
state.Add(\"Pennsylvania\",0.0617);
state.Add(\"Rhode Island\",0.0640);
state.Add(\"South Carolina\",0.0619);
state.Add(\"South Dakota\",0.0423);
state.Add(\"Tennessee\",0.0539);
state.Add(\"Texas\",0.0438);
state.Add(\"Utah\",0.0728);
state.Add(\"Vermont\",0.1060);
state.Add(\"Virginia\",0.0563);
state.Add(\"Washington\",0.0648);
state.Add(\"West Virginia\",0.0834);
state.Add(\"Wisconsin\",0.0693);
state.Add(\"Wyoming\",0.0778);
string stateKey = textBox1.Text.Trim().ToUpper();
if (state.ContainsKey(stateKey))
{
StateTax = state[stateKey];
}
else
{
string messageBoxText = \"Missing rate for state \" + stateKey;
MessageBox.Show(messageBoxText);
return;
}
所以这就是我到目前为止所能获得的,我无法获取StateTax来获取我的字典值之一的值。这通常不会花我那么长时间,但我的大脑最近才冻结了思考的时间。最好的写方法是什么?
解决方法
您是大写字母:
string stateKey = textBox1.Text.Trim().ToUpper();
但是字典键要大写:
\"Wyoming\"
在字典中的任何一个都以大写或小写形式出现,并对输入的值进行相同的处理,或者将输入的文本放在首位(最好是前者)
更新:甚至更好!使用Anthony \或Ed \的不区分大小写字典的想法!
,您正在按键上呼叫ToUpper
,但并未将按键全部加大写:
string stateKey = textBox1.Text.Trim().ToUpper();
\"ALABAMA\" != \"Alabama\"
,因此您需要:
在用户输入上呼叫6ѭ或ToLower()
,并相应输入密钥,或
使用不区分大小写的比较<-更好的选择
Dictionary<K,V>
类将在其构造函数之一中接受IEqualityComparer<T>
。用它来定义如何比较键值。
var caseInsensitiveDictionary = new Dictionary<string,int>(
StringComparer.OrdinalIgnoreCase);
StringComparer类实现IEqualityComparer
接口。
,您的词典存储了像\“ Abc \”这样的键,但是您尝试使用\“ ABC \”键来检索值。要解决您的特定难题,请指定一个完全忽略大小写的比较器。
var stateTaxTable = new Dictionary<string,decimal>(StringComparer.CurrentCultureIgnoreCase);
另请注意,我建议将该值设为decimal
。存储要在财务计算中使用的值更合适。您可以使用值的后缀“ 14”将其存储在字典中。例:
stateTaxTable.Add(\"Some State\",0.075M);
如果您将价格乘以该值,则也希望价格为decimal
。同样,这些都是建议,但是养成对财务数据使用适当类型的习惯是很好的。
,.ToUpper()
是您的问题。
文本框中的所有内容都将被标准化为大写,但是按键区分大小写。
,您正在将状态输入转换为大写。您将在词典中找不到该条目。
(1)更改代码以使用大写状态名称,或者(2)删除ToUpper并使用不区分大小写的比较器创建字典。
,或者你可以使用
String stateKey =
CultureInfo.CurrentCulture.TextInfo.ToTitleCase(textbox1.Text);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。