Там какой-либо путь состоит в том, чтобы поддержать ту же функциональность в коде ниже, но не имея необходимость создавать делегата? Я взаимодействую через интерфейс со сторонним API, который содержит много различных DeleteSomethingX (касательно IntPtr ptr) методы, и я пытаюсь централизовать код для IntPtr. Нулевая проверка.
private void delegate CleanupDelegate(ref IntPtr ptr);
...
private void Cleanup(ref IntPtr ptr, CleanupDelegate cleanup)
{
if (ptr != IntPtr.Zero)
{
cleanup(ref ptr);
}
}
Если вы имеете в виду без объявления типа делегата, то, вероятно, нет; очень немногие (если есть) встроенные делегаты используют ref
; но вы можете сделать его универсальным:
delegate void ActionRef<T>(ref T value);
Я не уверен, что это сильно сэкономит. Здесь могут быть также некоторые уловки с методами расширения, но об этом трудно сказать без более подробной информации.