Я столкнулся с ситуацией, которая, по моему мнению, может быть решена только с помощью параметра ref. Однако это будет означать изменение метода, чтобы всегда принимать параметр ref, когда мне нужна только функциональность, предоставляемая параметром ref 5% времени.
Это заставляет меня думать, что "кто, сумасшедший, должен найти другой путь". Неужели я глуп? Какие проблемы могут быть вызваны параметром ref?
Edit
Более подробная информация была запрошена, я не думаю, что они полностью релевантны тому, что я просил, но здесь мы идем.
Я хочу либо сохранить новый экземпляр (который будет обновляться с помощью идентификатора, который впоследствии может быть использован), либо получить существующий экземпляр, который соответствует некоторой логике и обновлению, и сохранить его, а затем изменить ссылку нового экземпляра на укажите на существующий.
Код может быть более понятным:
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 в этом случае, иначе все будет работать не так, как ожидалось.