我目前擁有的代碼非常類似於python裝飾器,它將一個函數作爲參數並返回由另一個包裝的相同函數(在這種情況下打開和關閉perforce連接)。你能寫一個可以接受任意數量參數的c#裝飾器函數嗎?
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 []。
你可以舉例說明你打算如何使用它?我不太清楚我明白你在找什麼。 – Bobson