即使键存在,TryGetValue returns 还是 Null?
TryGetValue returns Null even though key exists?
我梳理了一些字典对象以获取值,但所有这些对象 return 为空,即使当我检查它们是否包含具有键 [=16= 的键时也是如此] 是真的。我还可以使用 foreach 遍历每个以获取基于该键的值....我迷路了
foreach (var item in treeView.SelectedItems)
{
string reportName = item.Header.ToString();
string reportPath = "";
reportsAvail.TryGetValue(reportName, out reportPath);
reports.TryGetValue(reportName, out reportPath);
additionalReports.TryGetValue(reportName, out reportPath);
bool test;
test = reportsAvail.ContainsKey(reportName);
test = reports.ContainsKey(reportName);
test = additionalReports.ContainsKey(reportName);
foreach (var y in reportsAvail)
{
if (y.Key.ToString() == reportName)
{
textBlock1.Text = y.Value;
reportPath = y.Value;
}
}
}
奇怪的是它曾经工作过...我不确定是什么阻止了它
您使用了 TryGetValue
三次,每次都覆盖了 reportPath
。所以即使第一个或第二个包含 reportName
,如果第三个不包含它 reportPath
将再次 null
。
也许这可以解决问题:
bool reportFound = reportsAvail.TryGetValue(reportName, out reportPath);
if(!reportFound)
reportFound = reports.TryGetValue(reportName, out reportPath);
if(!reportFound)
reportFound = additionalReports.TryGetValue(reportName, out reportPath);
我梳理了一些字典对象以获取值,但所有这些对象 return 为空,即使当我检查它们是否包含具有键 [=16= 的键时也是如此] 是真的。我还可以使用 foreach 遍历每个以获取基于该键的值....我迷路了
foreach (var item in treeView.SelectedItems)
{
string reportName = item.Header.ToString();
string reportPath = "";
reportsAvail.TryGetValue(reportName, out reportPath);
reports.TryGetValue(reportName, out reportPath);
additionalReports.TryGetValue(reportName, out reportPath);
bool test;
test = reportsAvail.ContainsKey(reportName);
test = reports.ContainsKey(reportName);
test = additionalReports.ContainsKey(reportName);
foreach (var y in reportsAvail)
{
if (y.Key.ToString() == reportName)
{
textBlock1.Text = y.Value;
reportPath = y.Value;
}
}
}
奇怪的是它曾经工作过...我不确定是什么阻止了它
您使用了 TryGetValue
三次,每次都覆盖了 reportPath
。所以即使第一个或第二个包含 reportName
,如果第三个不包含它 reportPath
将再次 null
。
也许这可以解决问题:
bool reportFound = reportsAvail.TryGetValue(reportName, out reportPath);
if(!reportFound)
reportFound = reports.TryGetValue(reportName, out reportPath);
if(!reportFound)
reportFound = additionalReports.TryGetValue(reportName, out reportPath);