我知道有很多替代方法,我们可以通过参数传递Func并从body方法内部调用它。
我的问题在此方面有所扩展。我有一个带有ReaderWriterLock的DataTable,并且想集中进行锁定的位置。我的想法是要有一个接受lambda的方法,从那里我可以做这样的事情。
public void processLambda(some lambda/callback param) {
readWriteLock.acquireWriteLock(-1);
try {
// execute method here, which may write to the datatable.
} finally {
readWriteLock.releaseWriteLock();
}
}
我应该怎么做?我不知道该方法将具有哪种类型的参数。
答案 0 :(得分:0)
您的方法有一个选项是接受一个Action(无参数),然后,如果有参数,则使用lambda插入它们。
public void processLambda(Action baseMethod) {
readWriteLock.acquireWriteLock(-1);
try {
baseMethod.Invoke();
} finally {
readWriteLock.releaseWriteLock();
}
}
public void Main()
{
processLambda(parameterlessMethod);
processLambda(() => methodWithParameters(param1, param2, ...));
}
答案 1 :(得分:0)
您可以使用Delegate
类型,该类型可以引用任何委托。
public void InvokeWriteMethod(Delegate method, params object[] args)
{
readWriteLock.AcquireWriterLock(-1);
try
{
method.DynamicInvoke(args);
}
finally
{
readWriteLock.ReleaseWriterLock();
}
}
然后可以通过传递任何类型的委托以及该委托方法的object
参数数组或零个或多个离散参数来调用它:
InvokeWriteMethod(SomeMethod);
InvokeWriteMethod(SomeOtherMethod, new object[] {val1, val2, val3});
InvokeWriteMethod(YetAnotherMethod, val4, val5, val6);