如何解决不必要的物业调用问题?

问题描述 投票:0回答:1

我有两种具有相同主体的方法。

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 将再次被调用。有可能以某种方式避免这种情况吗?

c# properties dry
1个回答
0
投票

我发现了一个有趣的解决方案。

 public void AfterLoad()
    {
        IfNotNullExecute(QueryAfter, ()=>ParametersAfter);
    }

    private void IfNotNullExecute(string? query, Func<NpgsqlParameter[]?> parameters)
    {
        if (!string.IsNullOrEmpty(query))
            PostgreExecute(query, parameters.Invoke());
    }
© www.soinside.com 2019 - 2024. All rights reserved.