扩展方法问题。为什么我需要使用someObj = someObj.somemethod();

时间:2010-05-25 19:06:54

标签: c# arrays generics extension-methods

我有一个简单的扩展方法,我想用它来将项目添加到项目数组中。

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

这可行,但是当我使用它时,我必须将数组设置为等于返回值。我看到我正在返回一个数组。我可能希望这种方法无效,但我希望添加该项目。有没有人对我需要做什么有什么想法,让这项工作按照我想要的方式进行?

而不是someArray = someArray.addElement(item),我只想做someArray.addElement(item),然后someArray准备好了。我在这里缺少什么?

3 个答案:

答案 0 :(得分:8)

内置数组具有固定大小,因此无法以这种方式进行修改。如果您想要一个动态大小的数组,请使用List<T>

答案 1 :(得分:2)

如果你可以使用ref扩展方法,那么它是可能的,但根本不是一个好的方法。值得庆幸的是,他们不受支持。

如果你绝对必须有这样的东西,你可以使用带有ref参数的静态方法:

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

但这与你当前的解决方案一样丑陋(如果不是更多)。

答案 2 :(得分:1)

这是不可能的。调整阵列大小的唯一方法是创建一个新阵列。如果您需要经常向项目添加项目,请使用List,它们是专为此目的而设计的。