Я столкнулся с ситуацией, которую, я думаю, можно решить только с помощью параметра ref. Однако это будет означать изменение метода, позволяющего всегда принимать параметр ref, когда мне нужна только функциональность, предоставляемая параметром ref, в 5% случаев.
Это заставляет меня думать: "Вау, сумасшедший, должен найти другой путь". Я глупый? Какие проблемы могут быть вызваны параметром ref?
Редактировать
Были запрошены дополнительные детали, я не думаю, что они полностью соответствуют тому, что я просил, но здесь мы идем.
Я хочу либо сохранить новый экземпляр (который будет обновляться с использованием идентификатора, который впоследствии можно будет использовать), либо извлечь существующий экземпляр, который соответствует некоторой логике, и обновить его, сохранить его и изменить ссылку на новый экземпляр на указать на существующий.
Код может прояснить ситуацию:
protected override void BeforeSave(Log entity)
{
var newLog = entity;
var existingLog = (from log in repository.All()
where log.Stuff == newLog.Stuff
&& log.Id != newLog.Id
select log).SingleOrDefault();
if (existingLog != null)
{
// update the time
existingLog.SomeValue = entity.SomeValue;
// remove the reference to the new entity
entity = existingLog;
}
}
// called from base class which usually does nothing before save
public void Save(TEntity entity)
{
var report = validator.Validate(entity);
if (report.ValidationPassed)
{
BeforeSave(entity);
repository.Save(entity);
}
else
{
throw new ValidationException { Report = report };
}
}
Тот факт, что я добавил бы его только для одного (пока) дочернего элемента базового класса, препятствует использованию перегрузки (из-за того, что мне пришлось бы дублировать метод Save). У меня также есть проблема, из-за которой мне нужно заставить их использовать версию ref в этом случае, иначе все будет работать не так, как ожидалось.