List(C#)中数组值的搜索方法

时间:2017-02-19 15:12:43

标签: c# list search collections

我正在尝试在C#中创建一个搜索方法,但我被卡住了。

这是我想用来搜索List对象中的数组值的方法:

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);

如何搜索标题和说明值?

我得到例外:

  

对象引用未设置为对象的实例。

2 个答案:

答案 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]);
    }

}

答案 1 :(得分:0)

你可以写item?.Contains(keyword) ?? false而不是item.Contains(keyword)
如果项目为?,则null不会调用包含,但如果项目为null,则会获得null
如果项目为??false会告诉编译器使用null