как List <string>становится AutoCompleteStringCollection - PullRequest
5 голосов
/ 13 января 2011

У меня есть список, я хочу преобразовать его в autoCompleteStringCollection .. И я не хочу использовать foreach.

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

Примечание user.GetNameUsers () - это список.

Код не работает, он становится нулевым.

Спасибо

Ответы [ 2 ]

18 голосов
/ 13 января 2011
_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 голос
/ 13 января 2011

Проверив документацию на AutoCompleteStringCollection и, в частности, конструктор, который я вижу, не существует конструктора, который принимает 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 на данный момент.

...