c# - 如何正确更改代码以在没有委托的情况下使用
问题描述
有从中间 2 方法执行的方法 UpdateAsync。我想直接执行 UpdateAsync 而不依赖于签名中的委托,以便有机会将这两种行为结合起来。UpdateType 和 UpdateNameAsync 不相似。我怎样才能正确地改变它或摆脱委托以使其成为可能?
public async Task UpdateBaseEntityTypeAsync(Guid id, Guid baseEntityId, IEnumerable<string> type)
{
await UpdateAsync(id, baseEntityId, async x => x.UpdateType(type));
}
public async Task UpdateBaseEntityNameAsync(Guid id, Guid baseEntityId, string name)
{
await UpdateAsync(id, baseEntityId,
async x => await x.UpdateNameAsync(name)).ConfigureAwait(false);
}
public async Task UpdateAsync(Guid aggregatorId, Guid baseEntityId, Func<BaseEntity, Task> updateAsync)
{
var someAggregator = await someAggregator.TryFindById(aggregatorId).ConfigureAwait(false);
var baseEntity = someAggregator.ListBaseEntities()
.FirstOrDefault(x => x.Id == baseEntityId);
await updateAsync.Invoke(baseEntity).ConfigureAwait(false);
await aggregatorRepo.Save(someAggregator).ConfigureAwait(false);
}
我做过这样的事情,但我认为它看起来像废话:
public class BaseEntityDTO
{
public Guid Id { get; set; }
public string Name { get; set; }
public IEnumerable<string> Type { get; set; }
}
public async Task UpdateAsync(Guid aggregatorId, List<BaseEntityDTO> baseEntityDTO)
{
var someAggregator = await someAggregator.TryFindById(aggregatorId).ConfigureAwait(false);
foreach (var intent in intentsToEdit)
{
var baseEntity = someAggregator.ListBaseEntities()
.FirstOrDefault(x => x.Id == baseEntityDTO.Id);
if (baseEntityDTO.Type != null)
{
baseEntity.UpdateType(baseEntityDTO.Type);
}
if (baseEntityDTO.Name != null)
{
await baseEntity.UpdateNameAsync(baseEntityDTO.Name).ConfigureAwait(false);
}
await aggregatorRepo.Save(someAggregator).ConfigureAwait(false);
}
}
可以通过其他方式完成吗?