Помощник для добавления в массив - PullRequest
0 голосов
/ 16 января 2012

Я пытаюсь создать этот вспомогательный метод и не уверен, как обработать индексацию для этого.Я продолжаю получать индекс за пределами границ, когда он достигает нового инициализатора класса в моем помощнике:

public static void AddColumn(this ColumnElementType[] columnListToAddTo,
                             string name, string value)
{
    // Add a new column to the column list
    columnListToAddTo[columnListToAddTo.Length] = new ColumnElementType
            {
                 NAME = name,
                 VALUE = value
            };
}

Пример настройки и использования помощника:

        ColumnElementType[] columns =  new ColumnElementType[3];
        columns.AddColumn(Constants.EmailColumnName, email);
        columns.AddColumn(Constants.FirstNameColumnName, firstName);
        columns.AddColumn(Constants.LastNameColumnName, lastName);

Ответы [ 3 ]

4 голосов
/ 16 января 2012

Используйте List<ColumnElementType> вместо ColumnElementType[]

2 голосов
/ 16 января 2012

Это не работает, так как columnListToAddTo[columnListToAddTo.Length] всегда будет возвращать 3 (длина объявленного вами массива).Поэтому:

  • вы пытаетесь добавить каждый элемент с недопустимым индексом (3; допустимым будет 0..2)
  • , даже если вы используете Length-1, вы всегдапоместите новый элемент в то же место массива (перезаписав ссылку на ранее добавленный элемент)

Кроме того, поскольку массив не может быть расширен (вам придется скопировать содержимое в новый, большиймассив), я бы также предложил использовать List<ColumnElementType> или альтернативно ArrayList (если вы не можете использовать дженерики).

Если вы все еще хотите использовать массив, вам следует расширить свой помощникметод для получения параметра индекса, где добавить новый элемент, например:

ColumnElementType[] columns =  new ColumnElementType[3];
int index = 0;
columns.AddColumn(Constants.EmailColumnName, email, index++);
columns.AddColumn(Constants.FirstNameColumnName, firstName, index++);
columns.AddColumn(Constants.LastNameColumnName, lastName, index++);

//...

public static void AddColumn(..., int index)
{
  // Add a new column to the column list
  columnListToAddTo[index] = new ColumnElementType { ... };
}
1 голос
/ 16 января 2012
columnListToAddTo[columnListToAddTo.Length - 1]

потому что индекс начинается с 0

...