我面临的情况似乎只能通过使用引用参数来解决,然而这意味着要改变一个方法以始终接受引用参数,尽管我只需要引用参数提供的功能5%的时间。
这让我想到“哇,太疯狂了,一定要找其他方法”。我是不是很愚蠢?引用参数可能会导致什么问题?
编辑
需要进一步说明的细节,我认为它们与我的问题并不完全相关,但是我们来看看。
我想保存一个新实例(它将更新ID,稍后可能会使用),或检索与某些逻辑匹配并更新该实例,将其保存,然后更改新实例的引用以指向现有实例。
代码或许可以让问题更加清晰:
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版本,否则事情不会按预期工作。