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。