静态只读字符串数组
我在我的web应用程序中使用静态只读字符串数组。 基本上阵列有错误代码,我已经将所有类似的错误代码保存在一个数组中,并检查这个数组而不是检查每个不同的常量字符串。静态只读字符串数组
像
public static readonly string[] myarray = string[] {"232132132","31232132","123123123"}
请让我知道有没有在使用静态readony字符串数组任何伤害?
注:我没有面对任何错误,想知道是否有任何伤害或性能问题使用这样的?
那么,你应该知道它只是只读的数组引用,而不是数组内容。因此,如果数组是公有的(听起来像是这样),程序的任何部分都可能覆盖任何或全部消息,唯一不可能的是调整数组的大小。
这是否符合您的“伤害”定义?
是的,是的,这是正确的,我确保这些引用的位置值不被修改。我已经照顾了那 我的担忧是好的方法吗?或者我可以更好地实施? – batwadi 2010-03-07 05:28:06
@prakash:我认为Ben说的是你的数组值可以被覆盖,在这种情况下你没有保护它们。将需要一个不同的实现,而不是一个数组。 – 2010-03-07 05:33:12
正如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;
}
}
}
为什么不直接使用System.Collections.ObjectModel.ReadOnlyCollection? – 2010-03-07 06:55:47
这就是array.asreadonly返回的结果。但在公开API中公开是不理想的。 – Josh 2010-03-07 14:51:56
尝试这样的事情,而不是:
public static readonly ReadOnlyCollection<string> ErrorList = new ReadOnlyCollection<string>(
new string[] {
"string1",
"string2",
"stringn",
}
);
你需要include
命名空间System.Collections.ObjectModel
在为了暴露这个对象。 ReadOnlyCollection仅实现为getter,并且您的数组内容不能更改。
Kivin有个好主意。
您可能会看到静态类中的常量是否更适合您的需求。
我不明白你在问什么,你究竟想做什么? – Juliet 2010-03-07 05:19:01
你的错误信息是什么? – 2010-03-07 05:19:23
抱歉让你们感到困惑我已经更新了这个问题 – batwadi 2010-03-07 05:25:01