【问题标题】:string.contains item from comboboxstring.contains 组合框中的项目
【发布时间】:2015-02-27 17:06:51
【问题描述】:

另一个复杂的问题,我到处搜索,只能找到“如何在组合框中找到字符串”的答案

我想知道相反的情况。我有一个包含城市(字符串)的组合框,并且传递了一个地址字符串。

我想搜索我的地址字符串,看看它是否包含当前组合框中的任何一个城市。

例如。组合框包含:伦敦、巴黎、柏林

传入的地址:

  • 123, street, town, London, Postcode (True)
  • 123,街道,城镇,罗马, 邮政编码(假)

我的想法是这样的

address.Contains(combobox.Any().ToString());

但正如你可能知道的那样,这行不通!

【问题讨论】:

  • 您需要检查非过度组合框,但它会显示过度的内容

标签: c# winforms search combobox


【解决方案1】:

如果您的ComboBox 包含所有字符串项,那么您可以使用Enumerable.OfType<string>,然后应用LINQ 运算符Any,例如:

bool ifExist = combobox.Items.OfType<string>()
                         .Any(cbItem => address.Contains(cbItem);

对于不区分大小写的比较:

bool ifExist = combobox.Items.OfType<string>()
             .Any(cbItem => address.IndexOf(cbItem, 
                                            StringComparison.InvariantCultureIgnoreCase) 
                                            > -1);

【讨论】:

  • 这个编译,给我一秒钟测试,可能是赢家!
  • 比之前关于执行 for 循环的建议要好得多,我认为这更有效+1
  • 太棒了,完美解决了这个问题。非常感谢:)
  • @MethodMan:为什么要更高效?它不会导致相同的内部操作吗?必须有代码来循环遍历组合框的所有项目,搜索给定的数据。根据我的发现,它的可读性更好,但速度要慢得多:请参阅:stackoverflow.com/questions/3156059/…
  • @TobiasKnauss,我部分同意你的看法。如果有任何性能差异,那将是微不足道的。它并不比 for/foreach 循环更有效,但它更具可读性和更易于维护。但它不会慢很多
【解决方案2】:

如果你不喜欢 LINQ:

对所有组合框项进行for循环,并在组合框项的所有字符串值上调用address.Contains()

【讨论】:

  • 我没有 ;-) 另外,它似乎更慢,请参阅我对您接受的答案的评论。
【解决方案3】:

我想搜索我的地址字符串,看看它是否包含当前组合框中的任何一个城市。

bool addressContainsCity = combobox.Items.OfType<string>.Any(item => address.Contains(item));

bool addressContainsCity = combobox.Items.Cast<string>.Any(item => address.Contains(item));

【讨论】:

  • 我还没投呢!也不明白反对票!这看起来是一个很好的答案,我已经尝试实现它,但它不允许我使用 combobox.items.any。 (system.windows.forms.combobox.objectcollection 不包含任何定义)这可能是因为我使用的是 .net 4 吗?知道如何解决吗?
  • 不是我的反对意见,但我猜 Enumerable.Any 不能与 Items 属性一起应用。它没有实现IEnumerable&lt;T&gt;
  • @chutzzz,答案中的当前代码无法编译。修改你的答案。
【解决方案4】:

嗯,您可以通过多种方式做到这一点。这就是我的处理方式:

string[] arg = address.Split(',');
combobox.Items.Contains(arg[3]);

如果我理解你想要做什么,这应该可以工作,并且 City 总是在字符串中的相同位置。

【讨论】:

  • 当 linq / lambda 可以快速确定是否包含某些内容时,为什么 OP 需要使用 Split() 函数
  • 我从未说过这是唯一的方法。我说这是我会做的方式。只是因为我对 Split() 函数比对 lambdas 更舒服。
猜你喜欢
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 2014-01-27
  • 2016-06-20
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
相关资源
最近更新 更多