2010-03-07 67 views
4

我在我的web應用程序中使用靜態只讀字符串數組。 基本上陣列有錯誤代碼,我已經將所有類似的錯誤代碼保存在一個數組中,並檢查這個數組而不是檢查每個不同的常量字符串。靜態只讀字符串數組

public static readonly string[] myarray = string[] {"232132132","31232132","123123123"} 

請讓我知道有沒有在使用靜態readony字符串數組任何傷害?

注:我沒有面對任何錯誤,想知道是否有任何傷害或性能問題使用這樣的?

+4

我不明白你在問什麼,你究竟想做什麼? – Juliet 2010-03-07 05:19:01

+1

你的錯誤信息是什麼? – 2010-03-07 05:19:23

+0

抱歉讓你們感到困惑我已經更新了這個問題 – batwadi 2010-03-07 05:25:01

回答

5

那麼,你應該知道它只是只讀的數組引用,而不是數組內容。因此,如果數組是公有的(聽起來像是這樣),程序的任何部分都可能覆蓋任何或全部消息,唯一不可能的是調整數組的大小。

這是否符合您的「傷害」定義?

+0

是的,是的,這是正確的,我確保這些引用的位置值不被修改。我已經照顧了那 我的擔憂是好的方法嗎?或者我可以更好地實施? – batwadi 2010-03-07 05:28:06

+0

@prakash:我認爲Ben說的是你的數組值可以被覆蓋,在這種情況下你沒有保護它們。將需要一個不同的實現,而不是一個數組。 – 2010-03-07 05:33:12

3

正如Ben提到的,你的數組仍然是可修改的。它不能更改爲其他數組,但其中的元素可以輕鬆替換。作爲替代方案可以使陣列領域的私人和公開它在一個公共屬性,像這樣:

public class MyClass { 

    private static readonly string[] myArray = { ... }; 
    private static readonly IList<string> myArrayReadOnly = Array.AsReadOnly(myArray); 

    public static IList<string> MyArray { 
     get { 
      return myArrayReadOnly; 
     } 
    } 

} 
+0

爲什麼不直接使用System.Collections.ObjectModel.ReadOnlyCollection? – 2010-03-07 06:55:47

+1

這就是array.asreadonly返回的結果。但在公開API中公開是不理想的。 – Josh 2010-03-07 14:51:56

10

嘗試這樣的事情,而不是:

public static readonly ReadOnlyCollection<string> ErrorList = new ReadOnlyCollection<string>(
    new string[] { 
    "string1", 
    "string2", 
    "stringn", 
    } 
); 

你需要include命名空間System.Collections.ObjectModel在爲了暴露這個對象。 ReadOnlyCollection僅實現爲getter,並且您的數組內容不能更改。

0

Kivin有個好主意。

您可能會看到靜態類中的常量是否更適合您的需求。