如何解决C# 模式块将变量设置为开始值,做一些工作并用结束值重置变量
我正在尝试优化以下工作流程:
myObj.SupressEvents = true;
DoSomeWork();
DoSomeMoreWork();
...
myObj.SupressEvents = false;
这个问题很明显,要么 myObj.SupressEvents = true/false;
可能被遗漏并导致不必要的错误,或者只是通过使用返回可以使重置为 false 永远无法到达,我正在寻找一种模式避免忘记它,例如:
// This is a keyword example,not a function call nor deFinition
SetAndReset(myObj.SupressEvents,true,false)
{
DoSomeWork();
DoSomeMoreWork();
...
}
我想这可以通过委托或带有 Func 的函数来完成,但是即使我在两者之间进行返回,它仍然可以将变量重置为 false 吗? 原生 C# 关键字中有类似的东西吗?
解决方法
您可以声明一个接受 Action
(您想要做的工作)的方法并将调用包装在该方法中:
void Wrap(Action action,object myObj /* Replace with actual type,or remove parameter if field in class */)
{
myObj.SupressEvents = true;
action.Invoke();
myObj.SupressEvents = false;
}
您可以像这样调用该方法:
Wrap(() =>
{
DoSomeWork();
DoSomeMoreWork();
});
,
作为对@Hayden 解决方案的改进,我喜欢发布一个防弹版本,该版本还处理可能发生的异常并破坏变量状态:
public void SuppressRebuildPropertiesWork(Action action)
{
SuppressRebuildPropertiesWork(() =>
{
action.Invoke();
return true;
});
}
public bool SuppressRebuildPropertiesWork(Func<bool> action)
{
bool result;
try
{
SuppressRebuildProperties = true;
result = action.Invoke();
}
catch (Exception e)
{
Debug.WriteLine(e);
throw;
}
finally
{
SuppressRebuildProperties = false;
}
return result;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。