(C#)迭代只读私有集合成员

DGH*_*DGH 2 c# iteration hashset private-members

我有一个有两个HashSet<String>集合作为私有成员的类.我的代码中的其他类希望能够迭代这些HashSets并读取它们的内容.我不想写一个标准的getter,因为另一个类仍然可以做类似的事情myClass.getHashSet().Clear(); 是否有任何其他方式将我的HashSets的元素暴露给迭代而不暴露对HashSet本身的引用?我希望能够以与for-each循环兼容的方式执行此操作.

Jon*_*eet 6

假设您使用的是.NET 3.5,那么自己编写yield代码的另一种方法是调用LINQ方法.例如:

public IEnumerable<string> HashSet
{
    get { return privateMember.Select(x => x); }
}
Run Code Online (Sandbox Code Playgroud)

要么

public IEnumerable<string> HashSet
{
    get { return privateMember.Skip(0); }
}
Run Code Online (Sandbox Code Playgroud)

有各种LINQ运算符可以这样使用 - 使用Skip(0)可能是最有效的,因为在初始"跳过0值"循环之后,它可能只是其他答案中显示的foreach/ yield return循环.该Select版本将为每个产生的项目调用no-op投影代表.这种差异很大的可能性在天文数字上很小,但是 - 我建议你选择使代码最清晰的东西.