2017-04-17 8 views
0

ログブックとして動作するプログラムを作成しようとしています。私が今直面している唯一の問題は、ユーザーが投稿を検索できるようにしてからそれを印刷する検索機能です。私は何が間違っているのか分からず、私は多くの記事を見てきました。あなたの情報については、ログブック全体がリストであり、すべてのポストはこのリストの配列です。検索機能は3の場合です。プログラムがコンパイルされていますが、古いポストを検索するときに問題が発生し、System.String []のみが出力されます。また、ユーザーが投稿のタイトルを検索したときにタイトルと投稿の両方がタイトルに印刷されて印刷されるようにする必要があります。ここ リスト内の配列を使用しているC#の検索機能は、単に "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

'Console.WriteLine(entry);'をConsole.WriteLine(entry [0]);に変更します。ここで、0は配列内で取り出す要素のインデックスです –

答えて

0

が、私は古いポストを検索する際の問題は、それが唯一の[]可能System.Stringから を印刷し、です。

この置き換える:上記溶液は、アレイ内の各項目を分離する区切り文字(この場合は",")を使用

Console.WriteLine(string.Join(", ", entry)); 

:これに

Console.WriteLine(entry); 

を。

+1

ありがとうございます!これは動作します! – mackanmorre

+0

大文字と小文字を区別しないように変更する方法を知っていますか? – mackanmorre

+0

@mackanmorreあなたのコードのどの部分を参照していますか? –

0

あなたの記述に基づいて、ケース3の「エントリ」はタイプ「文字列配列」で、タイプ「文字列」ではないと思います。

0

あなたは問題として述べる:プログラムがコンパイルされ

を、私はそれだけで[]可能System.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); 
} 

あなたは配列全体を出力したい場合は、内部を通して単にループできます。これは期待されているようにあなたがString[]Console.WriteLineを呼び出しているので、コードを見てみると、それは、見え

foreach (var entry in entries) 
{ 
    foreach (var item in entry) 
    { 
     Console.WriteLine(item); 
    } 
} 

あなたは、検索結果が大文字小文字を区別しないようにしたい場合は、あなたがこのような何かを行うことができます:

このような配列の代わりに、
var entries = loggbok.Where(entry => entry.Any(item => 
    item.IndexOf(nyckelord, StringComparison.OrdinalIgnoreCase) > -1)); 
関連する問題