在我目前正在处理的 API 实现中,需要在执行某些任务之前暂时重复更改某些变量,并在完成任务后将它们改回到以前的状态。目前的代码如下:
当我试图在C#中做类似的事情时,我失败了,因为显然C#无法在类中存储对其他对象的引用。那么在C#中我该怎么去除这些混乱呢?
P.S.:如有需要请添加其他标签,我没有想到任何合适的。
var _oldValue = _variable;
_variable = tempValue;
try
{
doIt();
}
finally
{
_variable = oldValue;
}
频繁这样做很麻烦,难看,难以维护,并且将实际算法淹没在许多仅是实现工件的杂乱代码中。
在C++中,我会创建一个类,在构造期间将旧值存储在某个地方,并在其析构函数中恢复它:
{
temp_value tmp(variable_, temp_val);
do_it();
}
当我试图在C#中做类似的事情时,我失败了,因为显然C#无法在类中存储对其他对象的引用。那么在C#中我该怎么去除这些混乱呢?
P.S.:如有需要请添加其他标签,我没有想到任何合适的。
DoItWithRestore()
,在任何地方调用它而不是DoIt()
,这样这个混乱的代码就只存在于一个地方,并确保您对其进行注释,以便未来的代码读者了解意图和目的。 - Sanjeevakumar HiremathdoIt()
改为带参数的形式吗? - Jonas ElfströmdoIt()
调用插件的代码时。插件编写者希望执行的某些操作仅在特定上下文中允许,即在调用某些插件函数集时。因此,在调用插件之前,框架会设置上下文,并从插件调用的函数检查是否设置了该上下文。尽管还有其他应用程序可以使用此功能。 - sbi