2016-09-16 3 views
1

Я пытаюсь сравнить Hashset строк, заполненных из базы данных, от свойства string от объекта. Я знаю, что он существует в hashset, но он всегда возвращает false.C# Hashset <string> Содержит неверно возвращает false

Как ни странно, я написал тестовую программу, которая ведет себя так, как я ожидал. См. Ниже

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     string test = "A"; 
     HashSet<String>[] array = new HashSet<string>[1]; 
     array[0] = new HashSet<string>(); 
     Boolean isA = true; 
     Boolean isB = false; 
     array[0].Add("A"); 
     if (array[0].Contains(test) && isA || isB) 
      if (test.Equals("A")) { 
       Console.WriteLine("A"); 
      } 
      return; 
    } 
    } 
} 

С другой стороны, это не так. Должен ли я писать для этого специальный компаратор? Это не настраиваемый объект, я просто сравниваю строки. Я знаю, что строка содержится в хэш-наборе.

private readonly HashSet<string>[] cars = new HashSet<string>[5]; 

for (int i = 0; i < cars.Length; i++) 
     cars[i] = new HashSet<string>(); 

    foreach (DataRow dr in dt.Rows) 
    { 
     switch (dr[0].ToString()) 
     { 
      case "1": 
       cars[0].Add(dr[1].ToString()); 
          break; 
      } 
    } 
bool test = cars[0].Contains("A"); //Always returns false 
+0

Вы добавляете '1' и задаетесь вопросом, почему' A' не найден? Что говорит отладчик в HashSet? –

+0

Я знаю, что в хэш-наборе существует «А». Отладчик подтверждает это. – Hardrock302

+0

Затем укажите точный код, точный ввод, точное содержимое. Если ваша попытка в [mcve] не показывает ошибки, ошибка, скорее всего, находится в другом месте –

ответ

0

Попробуйте добавить с собой cars[0].Add(dr[1].ToString().Trim().ToUpper()) и проверьте.

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