2011-01-13 29 views
4

我有列表,我想將其轉換爲autoCompleteStringCollection ..而我不想使用foreach。如何列表<string>成爲AutoCompleteStringCollection

 _textbox.AutoCompleteMode = AutoCompleteMode.Append; 
     _textbox.AutoCompleteSource = AutoCompleteSource.CustomSource; 
     _textbox.AutoCompleteCustomSource = user.GetNameUsers() as AutoCompleteStringCollection; 

注意user.GetNameUsers()是列表。

代碼不起作用,它變爲空。

謝謝

+1

可能很重要的一點是:你得到空的原因是因爲`as`運算符試圖強制你的List 到`AutoCompleteStringCollection`中,但是`as`只有在運行時類型匹配時纔會成功(它會贏得'嘗試任何用戶定義的轉換),並且`List `和`AutoCompleteStringCollection`的運行時類型不相同,因此它返回null。 – 2011-01-13 09:09:17

+0

owww我明白了,謝謝。讓它更加明白 – aeruL 2011-01-13 14:13:59

回答

14
_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

檢查過documentationAutoCompleteStringCollection和特別是我看到的構造函數沒有構造函數一個List

因此,您有2個選項。

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去了。

相關問題