我有一个班级:
public SomeClass{
public List<Status> log { get; private set; }
public enum Status
{
waitingForConnection,
connected,
receivingFile,
doneReceivingFile
}
// later I initialize log and populate it...
///
}
到目前为止很容易告诉我,我只能通过该类设置新的日志列表。如何阻止用户编辑列表中的项目。换句话说,我不希望用户能够做一些事情:
SomeClass someClass = new SomeClass();
//....
someClass.log[3] = \\different value
如果我将列表日志设为私有,那么我将实现此目的,但我希望用户能够查看日志列表的内容,但无法编辑项目。
我也不想让公共枚举状态为私有,以便用户可以看到状态...
那么如何限制用户编辑列表中的项目?
答案 0 :(得分:4)
答案 1 :(得分:4)
使用ReadOnlyCollection。另外请注意,请记住readonly关键字并不能真正使集合只读。
private List<Status> m_Log = new List<Status>();
public ReadOnlyCollection<Status> Log {
get {
return m_Log.AsReadOnly();
}
}
答案 2 :(得分:3)
不要让你的财产List<Status>
。只需实现一个没有setter的索引器属性。
class Log {
private readonly List<Status> statuses;
public Log(List<Status> items)
{
statuses = items;
}
public Status this[int i]
{
get { return statuses[i]; }
}
}
public SomeClass
{
public Log log { get; private set; }
}
答案 3 :(得分:1)
如何将日志列表设为私有并具有公共get()属性?
答案 4 :(得分:0)
您拥有的一个选项是SomeClass
继承IEnumerable<T>
。
这将使您履行合同并实施GetEnumerator方法。只需返回列表的枚举器即可。现在可以将其用作只读IEnumerable集合。
修改强>
我再次看到这个,并意识到你只需要添加一个属性getter:
IEnumerable<Status> StatusList
{
foreach (Status item in log)
{
yield return item;
}
}