我经常使用组合框。我经常循环遍历它们以找到基于SelectedValue的匹配,例如......
while(cmbCompany.SelectedValue.ToString()!=B1ID)
{
cmbCompany.SelectedIndex++;
}
a)我错过了一些更快的选择!
b)如果我的比较是针对一个整数,那么声明一个字符串并将其设置为等于integer.ToString(),或者如果我只是(在上面的例子中)使用了B1ID.ToString(),那么编译器会优化对我来说呢?
c)或字符串比较是如此之慢以至于我最好将SelectedValue解析(或转换)为整数?
答案 0 :(得分:8)
算法中最令人困惑的部分是你在每次比较时递增索引。这是非常低效的,因为您实际上每次测试都会更改选择,这也会触发事件(如果您有连线)并且可能有危险,因为每次对选择更改事件做出反应都会使您的逻辑变得不必要地复杂。
还有很多其他方法。这是来自MSDN的更好(虽然粗糙)的代码示例:
int index = comboBox1.FindString(textBox2.Text);
comboBox1.SelectedIndex = index;
(请注意,此代码段首先查找集合中的数据,然后设置SelectedIndex值。)
答案 1 :(得分:1)
cmbCompany.SelectedValue = B1ID
应该做的伎俩 - 不是吗?
答案 2 :(得分:0)
a)也许,但我会让其他人回答这一部分。
b)编译器似乎不太可能将ToString
提升出来。
c)重新分析每个值肯定要慢一些。最好比较字符串。
答案 3 :(得分:0)
a / b)您是否尝试过使用FindString?该方法基本上寻找*以*开头的东西(对于Find exact,有一个等效的东西)。
或者您可以搜索“项目”并执行FindByValue
cmbCompany.Items.FindByValue
c)内置方法会更快,并且使用原生类型(也就是说它的投射成本更高,然后比较)