我有两个属性的类,它们是列表,其中一个是内容int - 来自第二个List的对象的ID。我覆盖了setter和getters来保存彼此之间的友好关系。但是当我添加一些这个列表时,他们不同步。如何使它们同步?
这是代码
public class Item
{
private List<Operation> _operations = new List<Operation>();
private List<int> _operationsID = new List<int>();
public List<Operation> operations
{
get { return this._operations; }
set
{
this._operations = value;
if (value != null)
{
foreach (Operation oper in value)
{
this._operationsID.Add(oper.ID);
}
}
}
}
public List<int> operationsID
{
get { return this._operationsID; }
set
{
this._operationsID = value;
if (value != null)
{
foreach (int operID in value)
{
this._operations.Add(new Operation(operID));
}
}
}
}
}
我应该覆盖List.Add,如果是这样,我该怎么做?
答案 0 :(得分:1)
在调用Add
方法之前,您必须先清除以前的列表内容:
public List<Operation> operations
{
get { return this._operations; }
set
{
this._operations = value;
if (value != null)
{
this._operationsID.Clear();
foreach (Operation oper in value)
{
this._operationsID.Add(oper.ID);
}
}
else
{
this._operationsID = null;
}
}
}
但说实话,我不认为将这些东西保存在两个不同的列表中是个好主意。你为什么不用Dictionary<int, Operation>
?
答案 1 :(得分:1)
有点不清楚你要做的是什么,但基本上你似乎需要封装这些列表,以便用户无法直接处理它们(并使它们不同步)。您可以通过不向用户公开列表来完成此操作。基本上,您试图将包含的项目保留给用户,以便每当他们处理您的项目集时,他们将被迫通过此类和类公开的函数。那么您唯一的问题是找出向用户公开的内容以及以何种方式。
public class Item {
private List<Operation> _operations = new List<Operation>();
private List<int> _operationsID = new List<int>();
public void addOperation(Operation o) {
_operations.Add(o);
_operationsID.Add(getIdentifier(o));
}
public void removeOperation(Operation o) {
_operations.Remove(o);
_operationsID.Remove(getIdentifier(o));
}
public void clear() {
_operations.clear();
_operationsID.clear();
}
public void findOperationMatching(Foobar foo) {
//
}
private int getIdentifier(Operation id) {
//
}
}
答案 2 :(得分:1)
试图管理两个版本的事实是个坏主意。如果是我,我会公开一个List<Operation>
,呼叫者可以添加/删除,第二个IEnumerable<int>
只公开操作的ID:
public List<Operation> Operations { get; set; }
public IEnumerable<int> OperationIDs
{
get
{
return Operations.Select(op => op.OperationID);
}
}
这样,调用者可以使用“操作”列表执行他们需要执行的操作(“添加”,“删除”,“计数”等)。 OperationID现在不是人们可以使用的第二个属性;相反,它只反映Operations属性中的信息。