Да, нельзя, тк происходит замыкание, а в замыканиях нельзя трогать переменные, которые приходят через ref/out.
Ибо компилятор не может гарантировать, что ref/out ссылка будет актуальна в момент вызова анонимного метода.
Попробуй переписать без замыкания.
Покажи целиком код - подскажу конкретнее.
Дядя Богдан, может лучше сделать что-то такое? obj.position = obj.position.Povar(/* ... */);
?
Или сделать несколько чуть более простых методов и делать так: obj.DoSomethingWithPosition()
И в итоге объединить это всё в одно действие?
Что вообще тут происходит?
Ну и вообще небольшое дублирование - это не страшно.
Страшно - если архитектура поломана.