我有两种具有相同主体的方法。
public void BeforeLoad()
{
if (!string.IsNullOrEmpty(QueryBefore))
PostgreExecute(QueryBefore, ParametersBefore);
}
public void AfterLoad()
{
if (!string.IsNullOrEmpty(QueryAfter))
PostgreExecute(QueryBefore, ParametersAfter);
}
我不想把它弄干。我想这样做。
public void BeforeLoad()
{
IfNotNullExecute(QueryBefore, ParametersBefore);
}
public void AfterLoad()
{
IfNotNullExecute(QueryAfter, ParametersAfter);
}
private void IfNotNullExecute(string? query, NpgsqlParameter[]? parameters)
{
if (!string.IsNullOrEmpty(query))
PostgreExecute(query, parameters);
}
但是随后 get 属性ParametersBefore 或ParametersAfter 将再次被调用。有可能以某种方式避免这种情况吗?
我发现了一个有趣的解决方案。
public void AfterLoad()
{
IfNotNullExecute(QueryAfter, ()=>ParametersAfter);
}
private void IfNotNullExecute(string? query, Func<NpgsqlParameter[]?> parameters)
{
if (!string.IsNullOrEmpty(query))
PostgreExecute(query, parameters.Invoke());
}