C# 从类属性返回只读集合的正确方法

C# 从类属性返回只读集合的正确方法,c#,C#,在我的类中,我有一个返回字符串数组的属性,我希望它是只读的。这样做的惯用方法是什么 现在我有这个: class MyClass { string[] MyStrings { get; set; } } 如果您最关心的是数据的完整性,则可以始终返回阵列的副本 另外,还有一些有趣的观点。您可以将数组返回为IEnumerable,该数组只允许枚举,但仍可以将其转换回string[]并修改元素: IEnumerable<string> MyIEnumerableOfStrings

在我的类中,我有一个返回字符串数组的属性,我希望它是只读的。这样做的惯用方法是什么

现在我有这个:

class MyClass
{
    string[] MyStrings { get; set; }
}

如果您最关心的是数据的完整性,则可以始终返回阵列的副本


另外,还有一些有趣的观点。

您可以将数组返回为
IEnumerable
,该数组只允许枚举,但仍可以将其转换回
string[]
并修改元素:

IEnumerable<string> MyIEnumerableOfStrings { get { return MyStrings; } }
IEnumerable MyIEnumerableOfStrings{get{return MyStrings;}}

这将取决于上下文。如果数据在创建只读对象后反映了对数组的更改,您将如何处理这些数据?您是否担心集合中的项会发生变化,是否会使数据副本的成本过高,等等。?注意,没有一个正确或错误的答案;在特定环境下,什么是最好的取决于对这些问题(以及其他问题)的回答。你不能说这是一个正确的选择。考虑到上下文,它可能是最好的,也可能不是最好的。没错,它可能并不总是最好的解决方案。谢谢。这个链接很有帮助。你不能说这是一个正确的选择。考虑到上下文,它可能是最好的,也可能不是最好的。