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获取我的一个词典值的价值。这通常不会花费我那么长时间,但我的大脑最近才开始思考。什么是写这篇文章的最好方法?
答案 0 :(得分:2)
你是上壳:
string stateKey = textBox1.Text.Trim().ToUpper();
但字典键有适当的上限:
"Wyoming"
将字典中的所有小写或大写放在字典中,并对输入的值执行相同操作,或将输入的文本设为第一个上限(前者更可取)
更新:甚至更好!使用Anthony或Ed的不区分大小写字典的想法!
答案 1 :(得分:2)
您的词典存储像“Abc”这样的键,但您尝试使用键“ABC”检索值。要修复特定的困境,请指定一个完全忽略大小写的比较器。
var stateTaxTable = new Dictionary<string, decimal>(StringComparer.CurrentCultureIgnoreCase);
另请注意,我将值decimal
作为建议。存储在财务计算中使用的值更合适。您可以使用值上的M
后缀将其存储在字典中。示例:
stateTaxTable.Add("Some State", 0.075M);
如果您将价格乘以此值,您也希望价格为decimal
。同样,这些是建议,但养成使用适当类型的财务数据的习惯是很好的。
答案 2 :(得分:2)
您正在密钥上调用ToUpper
,但您没有将密钥全部上限添加到字典中:
string stateKey = textBox1.Text.Trim().ToUpper();
"ALABAMA" != "Alabama"
,因此您需要:
ToUpper()
或ToLower()
并相应地输入您的密钥,或 Dictionary<K,V>
类将在其中一个构造函数中使用IEqualityComparer<T>
。用它来定义如何比较键值。
var caseInsensitiveDictionary = new Dictionary<string, int>(
StringComparer.OrdinalIgnoreCase);
StringComparer类实现IEqualityComparer
接口。
答案 3 :(得分:0)
.ToUpper()
是你的问题。
文本框中的任何内容都被标准化为大写,但键区分大小写。
答案 4 :(得分:0)
您正在将状态输入转换为大写。你永远不会在字典中找到这个条目。
(1)更改代码以使用大写状态名称或(2)删除ToUpper并使用不区分大小写的比较器创建字典。
答案 5 :(得分:0)
或者您可以使用
String stateKey =
CultureInfo.CurrentCulture.TextInfo.ToTitleCase(textbox1.Text);