C # Замена для макроса? - PullRequest
1 голос
/ 29 июля 2011

Я пытаюсь определить 10 панелей в своем коде, но абсолютно не хочу делать

public panel1();
public panel2();
etc....

, и быстрый поиск в Google показывает, что макросы недоступны в c #.Есть ли какой-нибудь массив, который я могу определить для использования вместо макроса, или какой-то другой способ, которым я мог бы справиться с этим?

Ответы [ 4 ]

2 голосов
/ 29 июля 2011

Ваш вопрос не слишком понятен;но вот как бы вы определили массив панелей в C #:

Panel[] panels = new Panel[10];

Вы можете использовать выражение инициализатора для заполнения панелей:

Panel[] panels = new Panel[] { new Panel(), new Panel(), /* ... */ };

Скорее всего, выхотите зациклить что-то и иметь некоторую логику для создания массива - возможно, в цикле или в виде выражения LINQ, например:

Panel[] panels = Enumerable.Range(0,10).Select(n => new Panel(n)).ToArray();
1 голос
/ 29 июля 2011

Почему бы просто не использовать цикл for и добавлять их динамически с помощью нескольких строк?Как то так:

for (int i=0;i<10;i++)
{
    Panel newPanel = new Panel();
    // each time through there is a new panel to use
}
0 голосов
/ 29 июля 2011

Если вы просто хотите 10 из чего-то, то вы не хотите, чтобы ваше выражение было загромождено петлями или другими не относящимися к делу конструкциями.

Я предлагаю использовать:

var panels = 10.Of<Panel>();

... что может быть достигнуто с помощью следующего метода расширения:

public static T[] Of<T>(this int number) where T : new()
{
  var items = new List<T>();
  for (int i = 0; i < number; i ++)
  {
    items.Add(new T());
  }
  return items.ToArray();
}

Это поможет вам лучше понять смысл вашего кода.

0 голосов
/ 29 июля 2011

Я бы использовал общий список и цикл for, упомянутый выше, например:

List<Panel> list = new List<Panel>();
for (int i = 0; i < 10; i++)
{
    list.Add(new Panel());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...