我有两个相同的方法,但其中一个方法在try catch
public void A(Guid agentId)
{
var agent = _agentsProvider.GetAgentById(agentId);
var updateCompletionSource = C(agentId);
try
{
var cacheEntry = UpdateAgentMetadataCacheEntry(agent, true, false);
updateCompletionSource.SetResult(cacheEntry);
}
catch (Exception e)
{
updateCompletionSource.SetException(e);
}
}
private Entry B(IAgent agent)
{
var updateCompletionSource = C(agent.Id);
try
{
var cacheEntry = UpdateAgentMetadataCacheEntry(agent, false, false);
updateCompletionSource.SetResult(cacheEntry);
return cacheEntry;
}
catch (Exception e)
{
updateCompletionSource.SetException(e);
return GetPreviousCacheEntry();
}
}
如何使用此部件收集相同的部件并创建新方法?
答案 0 :(得分:11)
除非GetPreviousCacheEntry
可能会产生有问题的副作用,否则我觉得您根本不需要方法A
。
如果您对它不感兴趣,只需调用方法B
并忽略返回值。
正如评论中所指出的那样,方法除了返回语句之外不是 - 因为它们对UpdateAgentMetadataCacheEntry
使用不同的第二个参数,并且它们也有不同的参数(一个有Guid
,一个有Agent
)。您可以将其重构为:
private Entry B(IAgent agent, bool foo)
{
var updateCompletionSource = C(agent.Id);
try
{
var cacheEntry = UpdateAgentMetadataCacheEntry(agent, foo, false);
updateCompletionSource.SetResult(cacheEntry);
return cacheEntry;
}
catch (Exception e)
{
updateCompletionSource.SetException(e);
return GetPreviousCacheEntry();
}
}
... foo
的名字很明显。我假设参数类型的不同并不是现实中的问题。
答案 1 :(得分:0)
像Jon说的那样,你不需要方法A.只需为布尔值添加另一个参数。
public void A(Guid agentId)
{
var agent = _agentsProvider.GetAgentById(agentId);
AnotherA(agent, true);
}
private Entry B(IAgent agent)
{
return AnotherA(agent, false);
}
private Entry AnotherA(IAgent agent, bool a)
{
try
{
var cacheEntry = UpdateAgentMetadataCacheEntry(agent, a, false);
updateCompletionSource.SetResult(cacheEntry);
return cacheEntry;
}
catch (Exception e)
{
updateCompletionSource.SetException(e);
return GetPreviousCacheEntry();
}
}