2011-01-13 23 views
4

私はリストを持っています。私はそれをautoCompleteStringCollectionに変換したいと思います。そしてforeachを使いたくありません。List <string>がどのようにAutoCompleteStringCollectionになるか

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

注意user.GetNameUsers()はlistです。

コードが機能せず、nullになります。

あなたは、多くの場合、これを必要とする場合は、拡張メソッドを書くことができますあなたの

+1

nullになっているのは、 'as'演算子がリストを' AutoCompleteStringCollection'に強制しようとしているからですが、 'as'は実行時の型が一致すれば成功しますユーザ定義の変換を試してみる)、 'List 'と 'AutoCompleteStringCollection'の実行時の型は同じではないので、代わりにnullを返します。 –

+0

私はそれを持って、ありがとう。もっと理解してください – aeruL

答えて

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(); 
+0

そして、1ライナーを探している場合は、ユーティリティメソッドでラップしてください。 – driis

+0

ありがとうございました。これは答えです – aeruL

+0

これを実行する際にクエリからヌル値を取り除いてください。私はこれをやっていないし、 'AutoCompleteCustomSource'を設定してエラーメッセージや情報を追加するとクラッシュします。 – jaredbaszler

1

AutoCompleteStringCollectionためdocumentationを確認した、と具体的には私が見るコンストラクタは、 a List

したがって、2つのオプションがあります。

1)あなたが必要とするコンストラクタを追加する新しいクラスを、継承、および内部で上記とほとんど同じコードを呼び出す)AutoCompleteStringCollection

var acsc= new AutoCompleteStringCollection(); 
acsc.AddRange(user.GetNameUsers().ToArray()); 

2の新しいインスタンスにすべてのリスト項目を追加するためにAddRangeを使用して、 。

public class MyAutoCompleteStringCollection : AutoCompleteStringCollection 
{ 
    public MyAutoCompleteStringCollection(IEnumerable items) 
    { 
    this.AddRange(items.ToArray()) 
    } 
} 

したがって、あなたが個人的に

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

を使用することができ、私は今のオプション1で行くだろう。

関連する問題