2010-05-25 81 views
0

我有一個簡單的擴展方法,我想用來將項目添加到項目數組。擴展方法問題。爲什麼我需要使用someObj = someObj.somemethod();

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準備好去。我在這裏錯過了什麼?

+2

爲什麼使用數組如果你想添加項目?只需要使用列表和'ToArray()'按需... – 2010-05-25 19:09:58

回答

8

內置數組具有固定大小,因此不能用這種方式修改。如果您想要一個動態大小的數組,請使用List<T>

1

這是不可能的。調整數組大小的唯一方法是創建一個新的數組。如果您需要頻繁地將項目添加到陣列,請使用List,它們是爲此目的而設計的。

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

但這僅僅是醜(如果不是更多的話)。

相關問題