ОБНОВЛЕНИЕ Мне было немного неясно из вашего вопроса, используется ли переданный аргумент где-либо еще в методе, он не выглядит так, как вы, поэтому вы можете просто взять Action
и используйте лямбду, чтобы указать делегата для вызова с захваченным аргументом:
protected void SaveChanges<T, TArg>(T mlaObject, TArg arg, Action undoFunction)
where T : WebObject
{
try { this._db.SaveChanges(); }
catch (Exception e)
{
Console.WriteLine("Error: " + e);
undoFunction();
}
}
К которым вы можете перейти:
SaveChanges(article, () => article.Authors.Remove(person));
Или, если это сам myObj, то в этом случае (как уже было указано в шести переменных) вы можете просто передать его обратно в делегат согласно его коду.
Или, отличается ли arg от mlaObject, и вы хотите сделать с ним и другие вещи в коде, в этом случае вы можете сделать:
protected void SaveChanges<T, TArg>(T mlaObject, TArg arg, Action undoFunction)
where T : WebObject
{
try { this._db.SaveChanges(); }
catch (Exception e)
{
Console.WriteLine("Error: " + e);
undoFunction(arg);
}
}
А затем: 1015 *
SaveChanges(article, person, article.Authors.Remove);