這就是我想你現在有:
public class Ids
{
public int? Id1
{
get { return _id1; }
set
{
if (_id1 != value)
{
_id1 = value;
Id2 = null;
Id3 = null;
}
}
}
public int? Id2
{
get { return _id2; }
set
{
if (_id2 != value)
{
_id2 = value;
Id4 = null;
}
}
}
public int? Id3 { get; set; }
public int? Id4 { get; set; }
private int? _id1;
private int? _id2;
}
而這裏的一個替代:
public class Id
{
public Id(int? value)
{
_value = value;
}
public void AddChild(Id child)
{
_children.Add(child);
}
public IEnumerable<Id> Children
{
get { return _children; }
}
public int? Value
{
get { return _value; }
set
{
if (_value != value)
{
_value = value;
foreach (Id id in Children)
{
id.Value = null;
}
}
}
}
public override string ToString()
{
return Value.ToString();
}
private readonly List<Id> _children = new List<Id>();
private int? _value;
}
使用方法如下:
var id1 = new Id(1);
var id2 = new Id(2);
var id3 = new Id(3);
var id4 = new Id(4);
id1.AddChild(id2);
id1.AddChild(id3);
id2.AddChild(id4);
注意,您可以添加這些到通用列表<Id>。
我對此只做了基本的測試,並且有很多的替代品(以及提供更簡單初始化的語法糖的方法)。也許其他人會建議更好的設計;希望這可以準確描述你的問題。
編輯:這是試圖回答問題;然而,這將有助於對您正在嘗試解決的問題有更多的背景。例如,可空的ID代表什麼,爲什麼一個ID是另一個的孩子?是否有數據庫參與?
你的意思是什麼?「但如果關係發生變化並且是維護的噩夢,那麼這將成爲一場噩夢」關係將如何變化,維護問題是什麼?你試圖解決什麼是「業務」問題?這個描述非常抽象。 – olle 2009-09-14 16:08:28