c#中的搜索功能,列表中的数组只打印“System.String []”

时间:2017-04-17 19:28:14

标签: c# search logic

我正在尝试制作一个作为日志的程序。到目前为止我遇到的唯一问题是搜索功能,用户应该能够搜索帖子,然后将其打印出来。我不确定我做错了什么,而且我一直在浏览很多帖子。为了您的信息,整个日志是一个列表,而每个帖子都是此列表中的数组。搜索功能是在案例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;


            }
        }
    }
}

}

3 个答案:

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