我正在尝试搜索字符串列表。我希望能够返回任何包含字符串信息的结果。例如:
(我已经有一个包含值的列表)列表字符串包含
" dog"," cat"," doghouse"," doge"," mouse"
我想要一种检查字符串的方法,例如:
string dog = "dog"
并返回值:
" dog"," doghouse"," doge"
这是我到目前为止所做的,至少我需要帮助的部分。
Console.WriteLine("What would you like to search for (Title: Full Title; Author: first, last): ");
search = Console.ReadLine();
var results = bookList.Where(x => x.Contains(search)).ToList();
if (results != null)
{
Console.WriteLine(results);
//i--;
search = String.Empty;
clearvars results;
Console.WriteLine("Press Enter to continue");
Console.ReadLine();
continue;
}
search
是一个空字符串
bookList
是我的List<string>
i
只是一个计数器,对于这个
如果这会改变任何事情,我会在for
循环中完成这一切。
答案 0 :(得分:1)
你需要一个像foreach
这样的循环来遍历结果:
foreach (var item in results)
{
Console.WriteLine(item);
}
因为正如您所说我希望能够返回任何找到的结果,但由于results
是strings
的列表,所以您需要遍历列表到打印列表中的每个项目。
答案 1 :(得分:1)
您需要迭代结果的每个元素(results
变量)。
Console.WriteLine("What would you like to search for (Title: Full Title; Author: first, last): ");
search = Console.ReadLine();
var results = bookList.Where(x => x.Contains(search)).ToList();
if (results != null)
{
foreach (var result in results)
{
Console.WriteLine(result);
}
Console.WriteLine("Press Enter to continue");
Console.ReadLine();
}
您需要在results
上进行迭代,因为它是一个List。当您将列表传递给Console.WriteLine()
时,Console.WriteLine(results)
会在ToString()
上调用方法results
。
在列表上调用ToString()
会返回:System.Collections.Generic.List1[System.String]
这是您在控制台上看到的内容。
System.Collections.Generic.List1[System.String]
是列表对象的字符串表示形式,但您真正感兴趣的是列表的元素。这就是你需要迭代列表并分别打印每个元素的原因。
您还可以将results
列表的所有元素加入到一个字符串中,然后将其打印出来:
var allResultsInOneString = string.Join(", ", results);
Console.WriteLine(allResultsInOneString);
答案 2 :(得分:0)
这是一种方式:
string[] searchList = new[] { "dog", "cat", "doghouse", "doge", "mouse" };
string searchString = "dog";
var matches = searchList.Where((x) => Regex.IsMatch(x, searchString));
答案 3 :(得分:0)
如果你想使用linq,你也可以这样做:
bookList.Where(x => x.Contains(search)).ToList().ForEach(x => Console.WriteLine(x));