我正在尝试制作一个作为日志的程序。到目前为止我遇到的唯一问题是搜索功能,用户应该能够搜索帖子,然后将其打印出来。我不确定我做错了什么,而且我一直在浏览很多帖子。为了您的信息,整个日志是一个列表,而每个帖子都是此列表中的数组。搜索功能是在案例3.程序正在编译,但问题是当我搜索旧帖子,然后它只打印出System.String []。我还要补充一点,当用户搜索帖子的标题时,我希望打印出与标题相关的标题和帖子。
这是代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Loggbok
{
class MainClass
{
public static void Main(string[] args)
{
bool running = true;//Ger ett booleskt värde till variabeln running för att kunna skapa en loop
List<string[]> loggbok = new List<string[]>();
// int loggIndex = 0; // Används för att fylla Arrayen
while (running)//Här skapas loopen
{
Console.WriteLine("\nVälkommen till loggboken!");
Console.WriteLine("\n[1] Skriv ett inlägg");
Console.WriteLine("[2] Skriv ut alla inlägg");
Console.WriteLine("[3] Sök inlägg");
Console.WriteLine("[4] Avsluta loggboken");
Console.Write("\nVälj: ");
int option;
try
{
option = Int32.Parse(Console.ReadLine());
}
catch
{
Console.WriteLine("Fel, du får bara skriva in nummer");
continue;
}
switch (option)
{
case 1:
string[] logg = new string[2];
Console.WriteLine("Ange en Titel");
logg[0] = Console.ReadLine();
Console.Clear();
Console.WriteLine("Ange text");
logg[1] = Console.ReadLine();
loggbok.Add(logg);
break;
case 2:
foreach (string[] item in loggbok)
{
Console.WriteLine(item[0]);
Console.WriteLine(item[1]);
}
Console.ReadLine();
break;
case 3:
Console.WriteLine("Skriv in ett ord du vill söka efter i loggboken");
var nyckelord = Console.ReadLine();
var entries = loggbok.Where(entry => entry.Contains(nyckelord));
foreach (var entry in entries)
{
Console.WriteLine(entry);
}
if (entries.Count() == 0)
{
Console.Write("Din sökning misslyckades...");
}
break;
case 4:
running = false;
break;
}
}
}
}
}
答案 0 :(得分:0)
但问题是当我搜索旧帖子时,它只会打印 out System.String []。
替换这个:
Console.WriteLine(entry);
用这个:
Console.WriteLine(string.Join(", ", entry));
上面的解决方案使用分隔符(在本例中为","
)来分隔数组中的每个项目。
答案 1 :(得分:0)
根据您的描述,我认为&#34;条目&#34;在案例3中具有类型:&#34;字符串数组&#34;而不是类型&#34;字符串&#34;。
答案 2 :(得分:0)
您将问题说明为:
该程序正在编译,但问题是当我搜索旧帖子时,它只打印出System.String []。
查看代码,看起来是预期的,因为您在Console.WriteLine
上调用了String[]
:
foreach (var entry in entries)
{
// Below, 'entry' is a string array, which does not override the
// `ToString` method so it just prints out a description of the object
Console.WriteLine(entry);
}
如果要输出整个数组,可以简单地循环遍历内部数组,如下所示:
foreach (var entry in entries)
{
foreach (var item in entry)
{
Console.WriteLine(item);
}
}
如果您想使搜索结果为Case-Insensitive,您可以执行以下操作:
var entries = loggbok.Where(entry => entry.Any(item =>
item.IndexOf(nyckelord, StringComparison.OrdinalIgnoreCase) > -1));