views:

58

answers:

3

I have a simple extension method that I would like to use to add an item to an array of items.

public static T[] addElement<T>(this T[] array, T elementToAdd)
{
    var list = new List<T>(array) { elementToAdd };
    return list.ToArray();
}

this works ok, but when I use it, I am having to set the array equal to the return value. I see that I am returning an Array. I likely want this method to be void, but I would like the item added. Does anyone have any ideas on what I need to do , to make this work the way I am wanting?

Instead of someArray = someArray.addElement(item), I just want to do someArray.addElement(item) and then someArray be ready to go. What am I missing here?

+8  A: 

Built-in arrays have a fixed size and so can't be modified in this way. If you want a dynamically-sized array, use a List<T>.

JSBangs
+1  A: 

It's not possible. The only way to resize an array is by creating a new one. If you need to frequently add items to an array, use a List, they are designed for this purpose.

Julien Lebosquain
+2  A: 

If you could use ref extension methods then it would be possible, but not a good way to do things at all. Thankfully they are not supported.

If you absolutely must have something like this you can use a static method with a ref parameter:

public static class ArrayHelp {
    public static void addElement<T>(ref T[] array, T elementToAdd)
    {
        Array.Resize(ref array, array.Length + 1);
        array[array.Length - 1] = elementToAdd;
    }
}

But this is just as ugly (if not more so) than your current solution.

Ron Warholic