2015-10-22 2 views
0

Моего словаря не отображается, возвращается правильное значение:словаря возвращение неверного значения для ключа

 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

enter image description here

Однако, вместо того, чтобы вернуться связанный объект BacklogItem она возвращается очень 1-ый в словаре:

enter image description here enter image description here

Ключ -324048562862518297 = -922008489156936615 так почему же неправильный объект возвращается?

Edit: Как словарь населен:

 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); 
      } 
     } 
+0

Как заполняется словарь? –

+2

Да, вы уверены, что тот же предмет не находится в двух местах в словаре? – DLeh

+3

Похоже, одно и то же значение сопоставляется с двумя разными ключами в словаре. Что такое словарная запись для ключа '" 324048562862518297 "'? – Lee

ответ

2

Это почти наверняка дело плохих входов. Либо у вас есть строки, которые соответствуют более чем одному из ваших операторов if (потому что между инструкциями INSERT нет разрывов строк), или есть несколько операторов вставки, которые связывают другое значение ключа словаря с тем же ProductScrumId и StoryTitle.

Смежные вопросы