2017-02-19 2 views
0

Я пытаюсь создать метод поиска в C#, и я застрял.Метод поиска для значений массива внутри списка (C#)

Это мой метод, который я хочу использовать для поиска значений массива в моем списке объектов:

public void Search() 
     { 
      Console.Write("\tKeyword: "); 
      string keyword = Console.ReadLine(); 

      List<string> searchResults = new List<string>(); 

      for (int a = 0; a < log.Count; a++) 
      { 
       foreach (string item in log[a]) 
       { 
        if (item.Contains(keyword)) 
         searchResults.Add(item); 
       } 
      } 

      Console.WriteLine("Search Results: "); 
      for (int b = 0; b < searchResults.Count; b++) 
      { 
       Console.WriteLine("\t{0}\t{1}\t\t{2}", searchResults[b][0], searchResults[b][1], searchResults[b][2]); 
      } 

     } 

Это мой список, что я хочу, чтобы искать через:

private List<string[]> log = new List<string[]>(); 

Вот как я добавляю массивы в Список:

string[] arrOfLog = new string[4] { 
      String.Format("{0:yyyy-MM-dd}", localDate), 
      title, 
      desc, 
      null 
     }; 

     log.Add(arrOfLog); 

Что я могу сделать, чтобы найти значения названия и описания?

я получаю исключение:

объекта не задана ссылка на экземпляр объекта.

+1

Что не работает в коде? – CodingYoshi

+0

'item.Contains()' будет вызывать 'NullReferenceException' для' arrOfLog [3] '. –

+0

Я предлагаю использовать класс для записей вместо строкового массива. –

ответ

0

Вы можете сделать это после создания класса модели,

public class model 
{ 
    string localDate { get; set; } 
    string title { get; set; } 
    string desc { get; set; } 
} 

затем с помощью этого вы можете искать их отдельно.

Это полный код

public void Search() 
{ 
    Console.Write("\tKeyword: "); 
    string keyword = Console.ReadLine(); 

    List<string> moList = new List<string>(); 
    foreach (var item in log) 
    { 
     model mo = new model(); 
     mo.localDate = log[0]; 
     mo.title = log[1]; 
     mo.desc = log[2]; 
    } 

    List<string> searchResults = new List<string>(); 

    for (int a = 0; a < moList.Count; a++) 
    { 
     foreach (model item in moList[a]) 
     { 
      if (item.title.Contains(keyword) || item.desc.Contains(keyword)){ 
       searchResults.Add(item); 
      } 
     } 
    } 

    Console.WriteLine("Search Results: "); 
    for (int b = 0; b < searchResults.Count; b++) 
    { 
     Console.WriteLine("\t{0}\t{1}\t\t{2}", searchResults[b][0], searchResults[b][1], searchResults[b][2]); 
    } 

} 
0

вы могли бы написать item?.Contains(keyword) ?? false вместо item.Contains(keyword)
? не вызывает Содержит если деталь null, но вы получите null если деталь null.
?? сообщает компилятору, что он использует false, если элемент null.

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