我正在努力與列表內的列表。有幾個問題。如何在列表中的幾個arraylist之一中找到一個字符串元素? C#
首先:我的移除logg的試驗正在工作,但我觸發了一個例外,不知道該怎麼辦(見案例4)。
第二:我想可以編輯任何現有的日誌(不在菜單中),更像是改變現有日誌中的一個字符串,如「post」或「title。我一個提示?
{
List<string[]> logBook = new List<string[]> { }; // Skapar en lista för arrayer av typen string.
DateTime time = DateTime.Now; // Sätter variabeln time till lokal tid på datorn.
int logCount = 0; // Deklarerar en variabel för att räkna inläggen,
// läggs utanför case 1 så att den är nollad vid uppstart av programmet
// och när den kommer in i case 1 så räknar den upp.
Console.WriteLine("\t" + time.ToLongDateString()); // Skriver ut datum i ett passande format för en loggbok.
Console.WriteLine("\n\tWelcome to the Logbook!\n"); // Skriver ut välkomsttext en gång vid uppstart,
// därför läggs den utanför while-loopen.
bool go = true; // Booleanskt värde för while-loopen som ska ligga för menyn och som br
while (go)
try // Exception-block som fångar upp om användaren knappar in ex. bokstäver som val i menyn (förhindrar körfel).
{
{
Console.WriteLine(""); //Skapar ny rad. Användaren ska inte känna att det blandar ihop sig.
Console.WriteLine("\t[1] Write a new post");
Console.WriteLine("\t[2] Search for a post");
Console.WriteLine("\t[3] Display all posts");
Console.WriteLine("\t[4] Remove a post");
Console.WriteLine("\t[5] Quit");
Console.Write("\n\tSelect from menu: ");
int menu = Convert.ToInt32(Console.ReadLine()); //Gör om inmatad sträng till heltal.
Console.WriteLine(""); //Skapar mellanrum innan nästa direktiv till användaren (Estetiskt).
switch (menu)
{
case 1:
logCount++;
string logNr = "Log number: " + logCount.ToString(); // Skapar en nurering av loggarna.
string timeDate = time.ToLongDateString(); // Ger oss ett datum för inlägget.
Console.Write("\tWrite a title to your post: ");
string title = "Title: " + Console.ReadLine(); // Ger oss en titel för inlägget.
Console.Write("\n\tPost is created " + timeDate + "\n\n\tWrite your post: ");
string post = Console.ReadLine();
string[] arr = new string[4];
arr[0] = logNr;
arr[1] = timeDate;
arr[2] = title;
arr[3] = post;
logBook.Add(arr);
break;
case 2:
Console.Write("\tWrite a searchword or a date (yyyy-mm-dd): ");
string keyword = Console.ReadLine();
Console.WriteLine("");
bool anyFound = false;
foreach (string[] item in logBook) //För varje element(item) i Listan(logBook) dvs (arr[i])
{
foreach (string element in item) //För varje element(element) i arr[i] dvs (arr[0], arr[1], arr[2])
{
if (element.Contains(keyword)) // Om arr[0], arr[1] eller arr[2] innhåller sökord....,
// letar efter en substring(keyword) inom strängen.
{
foreach (string s in item) // Skriv ut varje arr[i] i det elementet(item) (dvs hela den loggen)
// I detta fall tre varv, datum, titel, text(post) = 3 strängar.
// För att användaren ska kunna se hela loggen som sökordet finns i.
{
Console.WriteLine("\t" + s);
}
Console.WriteLine("");
anyFound = true; // Kliver ur loopen då uppdraget är slutfört, bool ändrar värde till true.
}
}
}
if (!anyFound) // Om inget hittas dvs bool är fortfarande oförändrat genomförs utskrift.
Console.WriteLine("\tSearchword couldn't be found.");
break;
case 3:
Console.WriteLine("\tThese are the current posts in Logbook.\n ");
foreach (var item in logBook) //För varje element(item) i Listan(logBook) dvs (arr[i])
{
foreach (string element in item) //För varje element(element) i arr[i] dvs (arr[0], arr[1], arr[2])
{
Console.WriteLine("\t" + element);
}
Console.WriteLine("");
}
break;
case 4:
Console.Write("\tWhich log number do you want to remove? : ");
string erase = "Log number: " + Console.ReadLine();
foreach (string[] item in logBook) // För varje element(item) i Listan(logBook) dvs (arr[i])
{
if (item.Contains(erase)) // Om arr[0], arr[1] eller arr[2] innhåller sökord....,
{
logBook.Remove(item); // raderas hela elementet(item/arr[i])
Console.WriteLine("\t" + erase + " is now removed from logbook.");
}
}
break;
case 5:
go = false; // Avbryter while-loopen och med det avslutar programmet.
break;
default: // Fångar upp om användaren skriver in ett tal utanför valmenyn.
Console.WriteLine("\tChoose from menu 1 - 4");
break;
}
}
}
catch(Exception e)
{
Console.WriteLine(""); //Estetisk för att användaren ska få ny rad innan meddelandet.
Console.WriteLine("\tChoose from menu by using number 1 - 4\n" + e); //Aktiveras om användaren knappar in annat än heltal.
}
}
情況4中應該發生什麼異常? – XtremeBaumer