#c# #arrays
Вопрос:
работая над проектом, в котором я создаю «блог», который помещает записи в блог в массив строк, который затем переносится в массив списков. Это мой текущий код, и я был бы признателен за любую помощь. Я все еще новичок в c# и программировании в целом, поэтому не знаю, как это исправить.
Текущая проблема заключается в том, что в случае 3 я получаю сообщение об ошибке : оператор «= = » не может быть применен к операндам типа «строка» и » строка []», а имя » i «не существует в текущем контексте кодового блока «сообщение в блоге».
Я создал здесь минимальный воспроизводимый пример, и единственные другие функции, которые в противном случае есть у программы, — это 1. Удалите все посты в блоге и 2. распечатайте все посты в блоге с их названием и содержанием.
bool minBool = true; Listlt;string[]gt; blogPost = new Listlt;string[]gt; { }; string[] post = new string[2]; while (minBool) { Console.WriteLine("nntWelcome to the blog!"); Console.WriteLine("nt[1] - Write a blogpost"); Console.WriteLine("t[3] - Search for a blogpost"); Console.Write("ntChoice:"); Int32.TryParse(Console.ReadLine(), out int input); switch (input) { case 1: Console.Write("tName your post: "); post = new string[2]; post[0] = Console.ReadLine(); Console.Write("tWrite your post: "); post[1] = Console.ReadLine(); blogPost.Add(post); break; case 3: string searchTerm = Console.ReadLine(); string result = "The blogpost doesn't exist"; foreach (string blog in blogPost) { if (searchTerm == blog) { result = $"tThe post is in the blog: {post[i]}"; break; } } Console.WriteLine(result); break;
Ответ №1:
Проблема в том, что вы пытаетесь сравнить searchterm
переменную , которая является a string
, с элементом blogpost
переменной, который имеет тип string[]
. Это не сработает.
Вместо этого вы можете сделать что-то вроде этого:
foreach(var blog in blogPost) { if(searchTerm == blog[0] || searchTerm == blog[1]) { result = $"tThe post is in the blog: {blog[0]}"; // Print blog name break; } }
Но таким образом, ваш поисковый запрос должен точно совпадать с названием или содержанием поста. Что не очень удобно для быстрого поиска. Вместо точного сравнения строки вы можете использовать Contains()
метод:
if(blog[0].Contains(searchTerm) || blog[1].Contains(searchTerm)) { result = $"tThe post is in the blog: {blog[0]}"; // Print blog name break; }
Теперь вы можете искать сообщения в блоге, указывая только часть имени или содержимого.
Имейте в виду, что на консоль будет выведена только первая запись в блоге, соответствующая поисковому запросу.
Подумайте о создании BlogPost
класса для сохранения записи в блоге внутри a List
. Таким образом, ваш код будет более выразительным и простым в обработке:
public class BlogPost { public string Name { get; } public string Content { get; } public BlogPost(string name, string content) { Name = name; Content = content; } }
Тогда сохраните его вот так:
private Listlt;BlogPostgt; _blogPosts = new Listlt;BlogPostgt;(); [...] case 1: Console.Write("tName your post: "); var name = Console.ReadLine(); Console.Write("tWrite your post: "); var content = Console.ReadLine(); _blogPosts.Add(new BlogPost(name, content));
Теперь ваш поиск выглядит примерно так:
foreach (var blog in _blogPosts) { if(blog.Name.Contains(searchTerm) || blog.Content.Contains(searchTerm)) { result = $"tThe post is in the blog: {blog.Name}"; // Print blog name break; } }
С помощью класса сообщений в блоге вы теперь гораздо более гибки. Вы можете, например, добавить дополнительное свойство для ключевых слов, которое следует использовать при поиске сообщений в блоге и т.д.
Комментарии:
1. Спасибо, но я вообще не должен использовать Linq / создавать класс в этом проекте, я, вероятно, должен был включить это. Моя вина. Однако с первым блоком кода, который вы опубликовали, я все еще получаю сообщение об ошибке «не удается преобразовать тип «строка[]» в строку». И разве этот метод не будет выполнять поиск только по самым последним публикациям, а не по всем публикациям в списке?
2. Я отредактировал свой ответ, чтобы настроить цикл foreach. Проблема в том, что блог имеет тип
string[]
и нетstring
. Чтобы исправить это, используйте либоvar
(как в моем ответе), либоstring[]
для типаblog
. Этот метод выполнит поиск по всемуblogPost
списку и прервется, как только одно из сообщений в блоге совпадет с поисковым запросом.3. Теперь это работает, большое спасибо, чувак. Я действительно ценю это 🙂