有没有办法在不再输入整个签名的情况下编写以下内容?
//desired base signature
public delegate string BaseDelegate<TProfile, TResult>(string requestorID, DateTime sentDate, string serviceID,
string source, TProfile profile, out DateTime recieved, out DateTime sent, out string psatSystemID, out TResult[] result);
//ugly version of child
public delegate string CurriedDelegate<T>(string requestorId, DateTime sentDate, string serviceId, string source,
T profile, out DateTime recieved, out DateTime sent, out string psatSystemID, out T[] result);
//syntax sugar,doesn't compile
public BaseDelegate<T,T> CurriedDelegate<T>; //TProfile is same type as TResult
答案 0 :(得分:3)
不,没有办法做到这一点,尽管如果两个类型参数相同,你可以从CurriedDelegate<T>
创建一个BaseDelegate<TProfile, TResult>
。
在我看来,更好的解决方案是将各种参数封装在一个单独的类型中。这真的是一个非常长的签名开始,并且可能是参数 彼此相关。
(我也试着避免使用这么多out
个参数 - 也许你实际上有两个类型要封装在这里,一个用于输入,一个用于输出?)< / p>