public class Foo : Collection<string>
{
bool _cancel = false;
public void AddWithoutDoingStuff(string item)
{
_cancel = true;
Add(item);
_cancel = false;
}
protected override void InsertItem(int index, string item)
{
base.InsertItem(index, item);
if (!_cancel)
{
//Do some stuff
}
}
}
我不知道是否有模式来避免这个丑陋的_cancel成员?我在这里找到了一些东西: Temporarily stop form events from either being raised or being handled? 但这只适用于事件。类中取消方法的模式
编辑 对不起,我没有表达自己。这只是一个例子。显式基类无关紧要。我想问的是在这种情况下避免使用_cancel变量的一般解决方案。我不喜欢这个例子中的AddWithoutDoingStuff方法。它不是在错误的情况下保存,所以我必须这样做:
try
{
_cancel = true;
Add(item);
}
finally
{
_cancel = false;
}
它也不是威胁保存。
由于您的业务逻辑(集合之外)决定是否应将“其他内容”插入到集合中,因此您应该重新考虑放置“附加内容”逻辑。在我看来,它不应该在收藏。 –
我建议创建一个自定义集合。实施ICollection或IList 。收集在您的情况下无法正常工作。 –
Sefe