我一直在寻找自己的模式,对于大型的预先存在的对象,我们希望对其进行一些修改以传递给另一个调用,但又不想复制但也不希望调用者看到更改:
ResultType f(T x, TLarge config) {
var oldVal = config.blah; // 1st line of boilerplate
config.blah = "New Value"; // 2nd line of boilerplate
try {
return g(config);
}
finally
{
config.blah = oldVal; // 3rd line of boilerplate
}
}
尤其是在要更改多个变量的情况下,这变得有些混乱。
是否有一种很好的方法可以将其包装为图案?我尝试使用using
并将引用作为IDisposable结构的成员,并在close上重置,但是由于引用不能成为成员,因此无法正常工作。
我暂时修改的许多类型都是字符串和整数,因此这需要使用值类型。