Преобразование ListBox.SelectedObjectCollection в ListBox.ObjectCollection?

Можно ли преобразовать ListBox.SelectedObjectCollection в ListBox.ObjectCollection на С#? Если да, то как бы я поступил?


person ChristianLinnell    schedule 02.11.2010    source источник
comment
У меня есть два идентичных метода, за исключением того, что один из них принимает все элементы в списке (Добавить все принтеры), а другой добавляет только выбранные элементы (Добавить выбранные принтеры). Я хочу сделать это с перегрузкой, но вместо того, чтобы зацикливаться, чтобы поместить значения в массив, я хотел знать, могу ли я привести их обоих к чему-то.   -  person ChristianLinnell    schedule 02.11.2010


Ответы (4)


У меня есть функция, которая принимает List<string>.

Я могу передать как SelectedItems, так и Items, приведя их.

Попробуй это:

SelectedItems.Cast<string>().ToList()
Items.Cast<string>().ToList()

<string> можно заменить другим типом объекта.

person jhoanna    schedule 28.09.2012

Это невозможно.

Вместо этого следует использовать IList.
Оба этих типа реализуют IList, поэтому любой из них можно передать как IList без явного приведения типов.

Если вы действительно хотите, вы можете создать новый ListBox.ObjectCollection и добавить элементы из SelectedObjectCollection.

person SLaks    schedule 02.11.2010
comment
как насчет ответа @ 341184? - person Kiquenet; 04.05.2013
comment
@Kiquenet: Он копирует, а не использует. Кроме того, он не использует ObjectCollection. - person SLaks; 05.05.2013

Вот мой ответ: это работает для меня.

System.Windows.Forms.ListBox.SelectedObjectCollection lst  =this.lstImage.SelectedItems;
List<string> selectedItems = new List<string>();

foreach (object obj in lst)
{
    selectedItems.Add(obj.ToString());
}
person Harsha    schedule 04.05.2011

Это мой ответ, который я использовал для преобразования проверенного списка в список.

CheckedListBox.CheckedItemCollection s= checkedListBox1.CheckedItems;

        List<object> ns = new List<object>();

        foreach (object ob in s)
        {
            ns.Add(ob);
        }

        listBox1.Items.AddRange(ns.ToArray());
person Ram    schedule 29.03.2017