【发布时间】:2013-08-24 04:10:32
【问题描述】:
我目前的代码很像 python 装饰器,它接受一个函数作为参数并返回由另一个包装的相同函数(在这种情况下打开和关闭 perforce 连接)。
public Func<TArg, TReturn> EnableP4<TReturn, TArgs>(Func<TArg, TReturn> function)
{
Func<TArg, TReturn> p4Wrapper = (TArg funcArg) =>
{
try
{
if (con.Status.Equals(ConnectionStatus.Disconnected)) { con.Connect(options); }
return function(funcArg);
}
finally { con.Disconnect(); }
};
return p4Wrapper;
}
目前这仅适用于具有一个参数的函数,我想知道它是否可以更通用(也许有一种方法可以将数组解包到方法中?)。
(类似这样的东西?)
public Func<TArgs, TReturn> EnableP4<TReturn, TArgs>(Func<TArgs, TReturn> function)
{
Func<TArgs, TReturn> p4Wrapper = (TArgs args) =>
{
try
{
if (con.Status.Equals(ConnectionStatus.Disconnected)) { con.Connect(options); }
return function(*args);
}
finally { con.Disconnect(); }
};
return p4Wrapper;
}
其中 TArgs 是一个 TArg[]。
【问题讨论】:
-
你能举例说明你打算如何使用它吗?我不太确定我是否了解您要查找的内容。