C# 为键返回错误值的字典
我的字典似乎没有返回正确的值:C# 为键返回错误值的字典,c#,.net,dictionary,C#,.net,Dictionary,我的字典似乎没有返回正确的值: foreach (string line in lines) { if (line.Contains("INSERT INTO ATTACHMENT VALUES")) { string AttachementID = line.Split('(', ',')[1]; string FileName = Attacheme
foreach (string line in lines)
{
if (line.Contains("INSERT INTO ATTACHMENT VALUES"))
{
string AttachementID = line.Split('(', ',')[1];
string FileName = AttachementsDictionary[AttachementID];
string BacklogScrumID = BacklogLookupDictionary[AttachementID];
BacklogItem Story = BacklogItemDictionary[BacklogScrumID];
Product Product = ProductDictionary[Story.ProductScrumId];
}
}
问题发生在:
BacklogItem Story = BacklogItemDictionary[BacklogScrumID];
下面是一个简单的类:
public class BacklogItem
{
public string ProductScrumId { get; set; }
public string StoryTitle { get; set; }
}
正在传递的值为:-324048562862518297
但是,它不是返回关联的BacklogItem对象,而是返回字典中的第一个对象:
钥匙-324048562862518297!=-922008489156936615那么为什么返回了错误的对象
编辑:字典的填充方式:
foreach (string line in lines)
{
if (line.Contains("INSERT INTO ATTACHMENT"))
{
AttachementsDictionary.Add(line.Split('(', ',')[1], line.Split('\'', '\'')[1]);
}
if (line.Contains("INSERT INTO BACKLOGITEM_ATTACHMENT"))
{
if (!BacklogLookupDictionary.ContainsKey(line.Split('(', ',')[1]))
{
BacklogLookupDictionary.Add(line.Split(',', ')')[1], line.Split('(', ',')[1]);
}
}
if (line.Contains("INSERT INTO BACKLOGITEMEJB VALUES"))//-324048562862518297
{
CurrentBacklogItem.ProductScrumId = Regex.Split(line, ",(?=(?:[^']*'[^']*')*[^']*$)")[7];
CurrentBacklogItem.StoryTitle = Regex.Split(line, ",(?=(?:[^']*'[^']*')*[^']*$)")[12];
BacklogItemDictionary.Add(line.Split('(', ',')[1], CurrentBacklogItem);
}
if (line.Contains("INSERT INTO PRODUCTEJB VALUES"))
{
CurrentProduct.ProductName = line.Split('\'', '\'')[1].Replace(@"'", string.Empty);
CurrentProduct.StoryPrefix = Regex.Split(line, ",(?=(?:[^']*'[^']*')*[^']*$)")[4].Replace(@"'", string.Empty);
ProductDictionary.Add(line.Split('(', ',')[1], CurrentProduct);
}
}
这几乎肯定是一个输入错误的问题。要么有多行与
if
语句匹配(因为INSERT语句之间没有换行符),要么有多条INSERT语句将不同的字典键值与相同的ProductScrumId和StoryTitle关联。字典是如何填充的?是,是否确定同一项不在字典中的两个位置?看起来相同的值映射到字典中的两个不同键。键“324048562862518297”的字典条目是什么?您的“Story”类可能有一个Equals()和GetHashcode()的错误实现methods@user469104:否,BacklogItem
类(该故事是的一个实例)未用作字典中的键,因此这无关紧要。