Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从c#中的内部函数返回?_C# - Fatal编程技术网

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

如何从c#中的内部函数返回?,c#,C#,我有一个函数,它是外部RESTWebAPI的包装器。在我的函数中,我检查所需的参数,如果它们在那里,那么我发出请求并返回数据。如果缺少必需的参数,我将记录缺少的参数的名称,并将状态返回为failure 我已经提取了将缺少的参数部分记录到函数的日志,因为它将在函数中被多次调用。以下是我的代码: public string WrapFunc(Dictionary<string, string> parameter) { //Check for required params

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

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

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
}
公共字符串WrapFunc(字典参数)
{
//检查所需参数
if(parameter.ContainsKey(“Param1”)和&!string.IsNullOrEmpty(parameter[“Param1”]))
{
objwebapirest.Param1=参数[“Param1”];
}
其他的
{
LogRequiredParameterError(“Param1”);
响应=“失败”;
返回响应;
}
}
私有void LogRequiredParameterError(字符串参数名称)
{
//将缺少的参数名称记录到数据库
}

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

在执行过程中将缺少的参数添加到列表中,然后在方法结束时处理它们一次(并将响应设置为“失败”一次)

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
}
公共字符串WrapFunc(字典参数)
{
var response=“成功”;
var missingParams=新列表();
//检查所需参数
if(parameter.ContainsKey(“Param1”)和&!string.IsNullOrEmpty(parameter[“Param1”]))
{
objwebapirest.Param1=参数[“Param1”];
}
其他的
{
//将缺少的参数的名称添加到列表中
缺失参数添加(“参数1”);
}
if(missingParams.Any())
{
//记录所有缺失的参数,并将响应设置为“故障”
foreach(缺失参数中的var p)
LogRequiredParameterError(p);
响应=“失败”;
}
返回响应;
}
私有void LogRequiredParameterError(字符串参数名称)
{
//将缺少的参数名称记录到数据库
}

嗯,只需更换两行代码,但您可以这样做:

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;
}
公共字符串WrapFunc(字典参数)
{
//检查所需参数
bool hasAllParams=true;
hasAllParams=CheckParam(参数“Param1”)和&hasAllParams;
//hasAllParams=CheckParam(参数“Param2”)&hasAllParams;等。
if(hasAllParams)
{
//正常进行
response=“SUCCESS”//可能值得将其设置为常量
}
其他的
{
响应=“失败”;
}
返回响应;
}
private bool CheckParam(字典参数、字符串参数名)
{
if(!parameters.ContainsKey(paramName)| | string.IsNullOrEmpty(parameters[paramName]))
{
LogRequiredParameterError(paramName);
返回false;
}
返回true;
}
或者,您可以为其他参数编写特定的检查函数,前提是这些参数有不同的条件,而不仅仅是不为空


为了回答您最初的问题-不,没有办法调用一个方法并让它在其调用者中强制返回

抛出一个异常怎么样?或者这是应该经常发生的事情吗?我不想使用异常,因为我只是检查所需的参数。它们也很贵,不是吗?嗯,是的,它们有点贵,这就是为什么它们应该只用于特殊情况-这是特殊情况吗?否则,您是否希望创建一种方法来替换
response=“FAILURE”;返回响应行?是的,我想提取
response=“FAILURE”;返回响应行编码到一个方法中,这样我就不必为每个缺少的必需参数重复它们。谢谢!这就是我要找的!