11

有没有办法在下面的代码中保持相同的功能,但不必创建委托?我正在与包含许多不同 DeleteSomethingX(ref IntPtr ptr) 方法的第 3 方 API 进行交互,并且我正在尝试集中用于 IntPtr.Zero 检查的代码。

private void delegate CleanupDelegate(ref IntPtr ptr);

...

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

1 回答 1

10

如果您的意思是不声明委托类型,那么可能不是;很少(如果有的话)内置代表使用ref; 但你可以让它通用:

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

我不确定这会节省多少。这里可能还有一些关于扩展方法的技巧,但如果没有更多细节就很难说清楚。

于 2009-12-10T21:20:04.400 回答