C # список, параметры - PullRequest
       280

C # список, параметры

0 голосов
/ 30 апреля 2010

Как Эндрю Харе предложил в его ответ :

Создать поле для хранения всех Экземпляры ListBox, а затем изменить конструктор, чтобы принять произвольный их количество.

Я попробовал следующее

class scaner
{
    readonly IEnumerable<ListBox> listBoxes;

    public IEnumerable<ListBox> ListBoxes
    {
        get { return this.listBoxes; }
    }

    public scaner(params ListBox[] listBoxes)
    {
        this.listBoxes = listBoxes;    
    }
}

Это позволит вам сделать это:

scaner Comp = new scaner(listBox1, listBox2);

Как я могу получить доступ к listbox1?

В классе сканер я пытаюсь позвонить this.listBoxes.
(Мне нужно вызвать listbox1 в классе сканера. Как я могу это сделать / позвонить?

Спасибо за ответы.

Ответы [ 3 ]

3 голосов
/ 30 апреля 2010

Почему бы вам не сохранить массив списков как ... массив?

public scanner
{
   private ListBox[] listboxes;

   public scanner(params ListBox[] listboxes)
   {
       this.listboxes = listboxes;
   }
}

Теперь вы можете получить доступ к listbox1 при вызове new scanner(listbox1, listbox2) как listboxes[0] в своем классе сканера.

2 голосов
/ 30 апреля 2010

Возможно, я ухожу, но из вашего другого вопроса похоже, что у вас есть пять ListBox, каждый из которых имеет свое значение, и вы можете сделать что-то особенное с каждым. Вместо того, чтобы передавать их все в конструктор и полагаться на то, что они все в правильном порядке, вы можете передать массив KeyValuePair<object,ListBox>. Затем доберитесь до каждого с помощью назначенного вами ключа.

Я бы не полагался на передачу массива params с определенным порядком. Если вам нужно сделать что-то очень специфичное с первым, вторым и т. Д.

Я могу сделать слишком много предположений из другого вопроса.

0 голосов
/ 30 апреля 2010

Вы можете использовать this свойство, что-то вроде этого ...

public class Scanner
{
    private readonly ListBox[] _listboxes;

    public Scanner(params ListBox[] listboxes)
    {
        _listboxes = listboxes;
    }

    public ListBox this[int index]
    {
        get
        {
            if(index < 0 || index > _listboxes.Length - 1) 
                throw new IndexOutOfRangeException();
            return _listboxes[index];
        }
    }
}

Использование:

ListBox listbox1 = new ListBox();
ListBox listbox2 = new ListBox();
var lst = new Scanner(listbox1, listbox2);
var lstbox1 = lst[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...