Подтвердить что ты не робот

Делегировать с параметром ref

Есть ли способ сохранить те же функции в коде ниже, но без создания делегата? Я взаимодействую с сторонним API, который содержит несколько различных методов DeleteSomethingX (ref IntPtr ptr), и я пытаюсь централизовать код для проверки IntPtr.Zero.

private void delegate CleanupDelegate(ref IntPtr ptr);

...

private void Cleanup(ref IntPtr ptr, CleanupDelegate cleanup)
{
    if (ptr != IntPtr.Zero)
    {
        cleanup(ref ptr);
    }
}
4b9b3361

Ответ 1

Если вы имеете в виду без объявления типа делегата, то, вероятно, нет; очень немногие (если есть) встроенные делегаты используют ref; но вы можете сделать его общим:

delegate void ActionRef<T>(ref T value);

Я не уверен, что это много экономит. Здесь также могут быть некоторые трюки с методами расширения, но это трудно сказать более подробно.