[英]Add an item to a string[] array
我的類有一個string []類型的屬性。
我需要創建另一個數組項,是否必須重置大小並復制所有以前的項目?
您可以使用Array.Resize
來保留數組的內容。
例如
var array = myClass.SomeArrayProperty;
Array.Resize(ref array, newSize);
myClass.SomeArrayProperty = array;
您需要使用臨時變量,因為屬性不能用作ref
參數。
如果它是您的類,您應該更改屬性以使用IList<string>
, ICollection<string>
或IEnumerable<string>
,具體取決於您預期將使用此屬性的方式。 然后,無論您選擇從函數返回哪一個,請嘗試在類型本身中使用List<string>
。
是的,如果您希望能夠動態追加項目,請使用List
。
雖然最好不要將List公開為屬性,但是請使用IList<string>
或IEnumerable<String>
。
如果可能的話我會使用一個列表。 管理起來要容易得多。 顯然,這取決於它是否是你的班級,你能夠毫無問題地成功。
List<string> myList = new List<string>();
myList.Add("item");
myList.Remove("item");
如果你必須使用數組然后使用
是。 數組具有固定的大小。
來自C#規范:
12.2數組創建
...
創建數組實例時,將建立每個維度的等級和長度,然后在實例的整個生命周期內保持不變 。 換句話說,不可能更改現有數組實例的等級,也不可能調整其維度的大小。
你也可以看一下Eric Lippert Arrays認為有些有害的博客文章
我更喜歡將string []復制到List <string>,執行所有操作,然后.ToArray()生成結果字符串[]。
你控制了班級嗎? 如果是這樣,請考慮在內部使用List<string>
。
(當你在它的時候,考慮在公共API中使用IList<string>
而不是string[]
。)
使用List<T>
更容易,但如果你不控制屬性,這不是一個選項。 請注意,這在肥皂生成的代理中很常見,但是IIRC有一個命令行開關,如果您更喜歡列表到數組,則可以使用它。
請注意,如果您經常這樣做,擴展方法可能會有所幫助:
public static T[] Append<T>(this T[] arr, T item) {
Array.Resize(ref arr, arr == null ? 1 : (arr.Length + 1));
arr[arr.Length-1] = item;
return arr;
}
您可以將其用於您的房產:
obj.SomeProp = obj.SomeProp.Append(someValue);
(注意,即使obj.SomeProp
為null,也可以創建一個長度為1的數組)
如果它是一個字段/變量,那么一個簡單的ref
參數也可能有效:
public static void Append<T>(ref T[] arr, T item) {
Array.Resize(ref arr, arr == null ? 1 : (arr.Length + 1));
arr[arr.Length-1] = item;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.