我有列表,我想将其转换为autoCompleteStringCollection ..而且我不想使用foreach。
_textbox.AutoCompleteMode = AutoCompleteMode.Append;
_textbox.AutoCompleteSource = AutoCompleteSource.CustomSource;
_textbox.AutoCompleteCustomSource = user.GetNameUsers() as AutoCompleteStringCollection;
注意user.GetNameUsers()是列表。
代码不起作用,它变为空。
谢谢
答案 0 :(得分:17)
_textbox.AutoCompleteMode = AutoCompleteMode.Append;
_textbox.AutoCompleteSource = AutoCompleteSource.CustomSource;
var autoComplete = new AutoCompleteStringCollection();
autoComplete.AddRange(user.GetNameUsers().ToArray());
_textbox.AutoCompleteCustomSource = autoComplete;
如果您经常需要,可以编写扩展方法:
public static class EnumerableExtensionsEx
{
public static AutoCompleteStringCollection ToAutoCompleteStringCollection(
this IEnumerable<string> enumerable)
{
if(enumerable == null) throw new ArgumentNullException("enumerable");
var autoComplete = new AutoCompleteStringCollection();
foreach(var item in enumerable) autoComplete.Add(item);
return autoComplete;
}
}
用法:
_textbox.AutoCompleteCustomSource = user.GetUsers().ToAutoCompleteStringCollection();
答案 1 :(得分:1)
检查了AutoCompleteStringCollection
List
,特别是构造函数,我看到没有构造函数需要AddRange
。
因此,您有两个选择。
1)使用AutoCompleteStringCollection
将所有列表项添加到var acsc= new AutoCompleteStringCollection();
acsc.AddRange(user.GetNameUsers().ToArray());
的新实例
public class MyAutoCompleteStringCollection : AutoCompleteStringCollection
{
public MyAutoCompleteStringCollection(IEnumerable items)
{
this.AddRange(items.ToArray())
}
}
2)继承一个新类,它添加了你需要的构造函数,并在内部调用与上面相同的代码。
_textbox.AutoCompleteCustomSource = new MyAutoCompleteStringCollection (user.GetNameUsers());
因此你可以使用
{{1}}
就个人而言,我现在选择选项1.