簡體   English   中英

將項添加到string []數組

[英]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");

如果你必須使用數組然后使用

Array.Resize

是。 數組具有固定的大小。

來自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM