如何从c#中的内部函数返回?
我有一个函数,它是外部RESTWebAPI的包装器。在我的函数中,我检查所需的参数,如果它们在那里,那么我发出请求并返回数据。如果缺少必需的参数,我将记录缺少的参数的名称,并将状态返回为failure 我已经提取了将缺少的参数部分记录到函数的日志,因为它将在函数中被多次调用。以下是我的代码:如何从c#中的内部函数返回?,c#,C#,我有一个函数,它是外部RESTWebAPI的包装器。在我的函数中,我检查所需的参数,如果它们在那里,那么我发出请求并返回数据。如果缺少必需的参数,我将记录缺少的参数的名称,并将状态返回为failure 我已经提取了将缺少的参数部分记录到函数的日志,因为它将在函数中被多次调用。以下是我的代码: public string WrapFunc(Dictionary<string, string> parameter) { //Check for required params
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”;返回响应将>行编码到一个方法中,这样我就不必为每个缺少的必需参数重复它们。谢谢!这就是我要找的!