【问题标题】:How can i convert a var which contains a searchresult ToLower? [duplicate]如何将包含搜索结果的 var 转换为 ToLower? [复制]
【发布时间】:2019-03-31 22:38:43
【问题描述】:

我已经完成了一项学校作业,我们需要能够在我们的程序(控制台应用程序)中进行搜索。

我创建了一个对象 (Sodacrate),其中包含一个索引长度为 24 的对象数组 (sodabottles)。 汽水瓶有名称、价格和类型变量 根据我们老师的说法,我们不能为此使用 LISTS(可能是因为他希望我们找到其他方法来解决这个问题),这就是包含对象的数组的原因。

当我搜索时,我可以搜索汽水瓶的确切名称,也可以搜索第一个字母。例如,如果我有一瓶 Coca Cola(准确拼写)并且我正在寻找 coca,那么我将找不到匹配项。如果我搜索 c、C 或 Coca 甚至 Coca Cola,我会找到匹配项。

如何使搜索结果转换为 ToLower?我试过这个并搜索了问题,但没有找到任何明确的解决方案。

它给了我一个编译错误

错误 CS0029 无法将类型 'string' 隐式转换为 'System.Collections.Generic.IEnumerable' thesodacrate C:\Users\Benny\source\repos\thesodacrate\thesodacrate\Sodacrate.cs 244 Active

如果这看起来很简单,我很抱歉,但我几乎为此而秃顶。我还需要说,这对我来说是一个全新的领域,我主要是通过反复试验来解决这个问题。

我已经编辑了代码,所以它看起来是最新的。 entries = 第 7 行的条目会产生编译错误。

 Console.Write("Type in your search: ");
            var keyword = Console.ReadLine();
            keyword = keyword.ToLower();
            Console.WriteLine(keyword);
            var entries = bottles.Where(entry => entry.SodaBottleName !=null && entry.SodaBottleName.Contains(keyword));
            entries = entries.ToString().ToLower();

            if (entries.Count() == 0)
            {
                Console.Write("Didn´t find any match");
                Console.WriteLine("Press enter to return to mainmenu");
            }
            else
            {

                foreach (var entry in entries)
                {
                    Console.WriteLine("{0} - {1} $", entry.SodaBottleName, entry.SodaBottlePrice);
                }
                Console.WriteLine("You´ve added {0} bottles that match your search: {1}.", entries.Count(), keyword);
                Console.WriteLine("Press enter to return to mainmenu");
            }
            Console.ReadLine();

【问题讨论】:

  • 字符串是不可变的。这意味着 keyword.ToLower() 不会改变 keyword 而是返回一个带有 ToLower() 结果的新字符串。如果您希望关键字为小写,则需要编写 keyword = keyword.ToLower()
  • 对不起,伙计们。我不认为我可以使用 Equals,因为我需要能够输入单词的片段。据我了解,Equals 将两个字符串相互比较并返回 true 或 false?如果我在搜索字段中输入 coca 并且我希望搜索方法返回包含名称 Coca Cola 的所有索引,则 Equals 将返回 false?
  • 感谢 Steve 将这一点弄清楚。我现在在我的代码中更改了它,但是如果我在搜索结果上做同样的事情,它会给我一个编译错误。严重性代码说明项目文件行抑制状态错误 CS0029 无法将类型“字符串”隐式转换为“System.Collections.Generic.IEnumerable”thesodacrate C:\Users\Benny\source\repos\thesodacrate\thesodacrate\Sodacrate。 cs 243 主动

标签: c# search


【解决方案1】:

您需要将两个字符串都调低。关键字和字符串。

var keyword = Console.ReadLine().ToLower();

entry.SodaBottleName.ToLower().Contains(keyword)

【讨论】:

  • 然而,这不是 C# 中字符串的比较方式。这里应该是entry.SodaBottleName.IndexOf(keyword, StringComparison.CurrentCultureIgnoreCase) >= 0,以避免调用ToLower时发生的不必要的复制操作和内存分配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多