У меня возникла ситуация, когда мне нужно сгенерировать несколько похожих анонимных делегатов. Вот пример:
public void Foo(AnotherType theObj)
{
var shared = (SomeType)null;
theObj.LoadThing += () =>
{
if(shared == null)
shared = LoadShared();
return shared.Thing;
};
theObj.LoadOtherThing += () =>
{
if(shared == null)
shared = LoadShared();
return shared.OtherThing;
};
// more event handlers here...
}
У меня проблема в том, что мой код не очень СУХОЙ. Содержимое каждого из обработчиков событий ОЧЕНЬ похоже и может быть легко параметризовано в фабричный метод. Единственное, что мешает мне это сделать, это то, что каждый делегат должен делиться ссылкой на переменную shared
. Я не могу передать shared
фабричному методу с помощью ключевого слова ref
, так как вы не можете создать замыкание вокруг ref
переменной . Любые идеи?