List 如何成为AutoCompleteStringCollection
我有列表,我想将其转换为autoCompleteStringCollection ..我不想使用foreach。
_textbox.AutoCompleteMode = AutoCompleteMode.Append; _textbox.AutoCompleteSource = AutoCompleteSource.CustomSource; _textbox.AutoCompleteCustomSource = user.GetNameUsers() as AutoCompleteStringCollection;
注意user.GetNameUsers()是列表。
代码不起作用,它变为null。
谢谢
_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 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();
检查了AutoCompleteStringCollection
的文档 ,特别是我看到的构造函数,没有构造函数接受List
。
因此,您有2个选项。
1)使用AddRange
将所有列表项添加到AutoCompleteStringCollection
的新实例
var acsc= new AutoCompleteStringCollection(); acsc.AddRange(user.GetNameUsers().ToArray());
2)inheritance一个新类,它添加了你需要的构造函数,并在内部调用与上面相同的代码。
public class MyAutoCompleteStringCollection : AutoCompleteStringCollection { public MyAutoCompleteStringCollection(IEnumerable items) { this.AddRange(items.ToArray()) } }
因此你可以使用
_textbox.AutoCompleteCustomSource = new MyAutoCompleteStringCollection (user.GetNameUsers());
就个人而言,我现在选择1。