2010-03-07 98 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有个好主意。

您可能会看到静态类中的常量是否更适合您的需求。

相关问题