如何从c#中的Inner函数返回?

时间:2015-02-23 04:42:08

标签: c#

我有一个函数,它是外部REST Web API的包装器。在我的函数中,我正在检查所需的参数,如果它们在那里,那么我发出请求并返回数据。如果缺少必需参数,则记录缺失参数的名称并将状态返回为失败。

我已将缺少参数部分的日志记录提取到函数中,因为它将在函数中多次调用。这是我的代码:

public string WrapFunc(Dictionary<string, string> parameter)
{
    //Check for required params
    if (parameter.ContainsKey("Param1") && !string.IsNullOrEmpty(parameter["Param1"]))
    {
        objWebAPiRequest.Param1 = parameter["Param1"];
    }
    else
    {
        LogRequiredParameterError("Param1");
        response = "FAILURE";
        return response;
    }
}

private void LogRequiredParameterError(string parameterName)
{
    //Logging the missing parameter name to db
}

我正在寻找一种方法来封装响应在LogRequiredParameterError方法中的返回,或者更好的方式是返回失败消息而不重复自己。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

随着时间的推移将缺少的参数添加到列表中,然后在方法结束时处理它们(并将响应设置为“FAILURE”一次)。

public string WrapFunc(Dictionary<string, string> parameter)
{
    var response = "SUCCESS";
    var missingParams = new List<string>();

    //Check for required params
    if (parameter.ContainsKey("Param1") && !string.IsNullOrEmpty(parameter["Param1"]))
    {
        objWebAPiRequest.Param1 = parameter["Param1"];
    }
    else
    {
        // Add the name of the missing param to a list
        missingParams.Add("Param1");
    }

    if (missingParams.Any())
    {
        // Log all the missing parameters and set response to "FAILURE"
        foreach (var p in missingParams)
            LogRequiredParameterError(p);

        response = "FAILURE";
    }

    return response;
}

private void LogRequiredParameterError(string parameterName)
{
    //Logging the missing parameter name to db
}

答案 1 :(得分:0)

嗯,它只需要2行代替,但你可以这样做:

public string WrapFunc(Dictionary<string, string> parameter)
{
    //Check for required params
    bool hasAllParams = true;
    hasAllParams = CheckParam(parameter, "Param1") && hasAllParams;
    //hasAllParams = CheckParam(parameter, "Param2") && hasAllParams; etc.

    if (hasAllParams)
    {
        //proceed normally
        response = "SUCCESS"; //might be worth making it a const
    }
    else
    {
        response = "FAILURE";            
    }
    return response;
}

private bool CheckParam(Dictionary<string, string> parameters, string paramName)
{
    if (!parameters.ContainsKey(paramName) || string.IsNullOrEmpty(parameters[paramName]))
    {
        LogRequiredParameterError(paramName);
        return false;
    }
    return true;
}

或者,你可以为其他参数编写特定的检查函数,如果它们有不同的条件而不是空的。

回答你原来的问题 - 不,没有办法调用一个方法并强制它在调用者中return