C# 如何列出<;字符串>;成为AutoCompleteTestringCollection

C# 如何列出<;字符串>;成为AutoCompleteTestringCollection,c#,autocomplete,desktop-application,C#,Autocomplete,Desktop Application,我有一个列表,我想将其转换为AutoCompleteTestringCollection。。我不想用foreach _textbox.AutoCompleteMode = AutoCompleteMode.Append; _textbox.AutoCompleteSource = AutoCompleteSource.CustomSource; _textbox.AutoCompleteCustomSource = user.GetNameUser

我有一个列表,我想将其转换为AutoCompleteTestringCollection。。我不想用foreach

        _textbox.AutoCompleteMode = AutoCompleteMode.Append;
        _textbox.AutoCompleteSource = AutoCompleteSource.CustomSource;
        _textbox.AutoCompleteCustomSource = user.GetNameUsers() as AutoCompleteStringCollection;
注意user.GetNameUsers()是列表

代码不工作,它将变为空

多谢各位

_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;
    }
}
检查了
AutoCompleteStringCollection
,特别是我看到的构造函数,没有一个构造函数接受
列表

因此,您有两种选择

1) 使用
AddRange
将所有列表项添加到
AutoCompleteStringCollection

var acsc= new AutoCompleteStringCollection();
acsc.AddRange(user.GetNameUsers().ToArray());
2) 继承一个新类,该类将添加所需的构造函数,并在内部调用与上述代码大致相同的代码

public class MyAutoCompleteStringCollection : AutoCompleteStringCollection
{
  public MyAutoCompleteStringCollection(IEnumerable items)
  {
     this.AddRange(items.ToArray())
  }
}
因此,您可以使用

_textbox.AutoCompleteCustomSource = new MyAutoCompleteStringCollection (user.GetNameUsers());

就个人而言,我现在选择选项1。

并且,如果您正在寻找一行程序,请使用实用程序方法将其包装起来。在执行此操作时,请确保从查询中去掉所有空值。我没有这样做,当设置
AutoCompleteCustomSource
时,它会崩溃,没有错误消息或提示信息。请注意:您变为null的原因可能是
as
操作员试图将您的列表强制为
AutoCompleteStringCollection
,但是
as
只有在运行时类型匹配时才会成功(它不会尝试任何用户定义的转换),并且
List
AutoCompleteStringCollection
的运行时类型不相同,因此它会返回null。让它更了解
this.textbox.AutoCompleteCustomSource.AddRange(新字符串[]{“anytext”,“另一个”})
_textbox.AutoCompleteCustomSource = new MyAutoCompleteStringCollection (user.GetNameUsers());