Нет, вы не можете использовать передачу по ссылке с делегатами Action
. Хотя в рамках фреймворка существует понятие «тип, переданный по ссылке» как Type
, на самом деле это не тип в обычном смысле, как в C #. ref
- это модификатор параметра, а не часть имени типа, если вы понимаете, о чем я.
Однако вы можете создать свой собственный набор эквивалентных типов, например,
delegate void ActionRef<T>(ref T item);
Конечно, если вам нужно сочетание параметров ref и non-ref в одном делегате, вы получите ужасный набор комбинаций:
delegate void ActionRef1<T1, T2>(ref T1 arg1, T2 arg2);
delegate void ActionRef2<T1, T2>(T1 arg1, ref T2 arg2);
delegate void ActionRef3<T1, T2>(ref T1 arg1, ref T2 arg2);