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