帮助程序添加到数组

时间:2012-01-16 07:39:26

标签: c# arrays extension-methods

我正在尝试创建此辅助方法,并且不确定如何处理此索引。当它在我的帮助器中遇到新的类初始化器时,我不断使索引超出范围:

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 个答案:

答案 0 :(得分:4)

使用List<ColumnElementType>代替ColumnElementType[]

答案 1 :(得分:2)

这不起作用,因为columnListToAddTo[columnListToAddTo.Length]将始终返回3(您声明的数组的长度)。因此:

  • 您试图将每个元素添加到无效索引(3;有效值为0..2)
  • 即使您使用Length-1,也总是将新元素放在同一个数组位置(覆盖对先前添加的元素的引用)

此外,由于无法扩展数组(您必须将内容复制到更大的新数组),我还建议使用List<ColumnElementType>ArrayList(如果你不能使用泛型。)

如果你仍想使用数组,那么你应该扩展你的helper方法以获取一个索引参数,在哪里添加新元素,例如:

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 { ... };
}

答案 2 :(得分:1)

columnListToAddTo[columnListToAddTo.Length - 1]

因为索引从0开始