我有两个函数,一个接收 FormCollection,另一个接收 HttpRequest,如下所示:

public void SetUrlParameters(FormCollection request, string controllerName = "")
{
    string sessionID = ConvertToString(request["sessionID"]);
    string idSession = ConvertToString(request["idSession"]);
    string sessionid = ConvertToString(request["sessionid"]);

    if (idSession.Length > 0)
        this.sessionID = idSession;
    else if (sessionid.Length > 0)
        this.sessionID = sessionid;
    else
        this.sessionID = sessionID;

}

private void SetUrlParameters(HttpRequest request, string controllerName = "")
{

    string sessionID = ConvertToString(request["sessionID"]);
    string idSession = ConvertToString(request["idSession"]);
    string sessionid = ConvertToString(request["sessionid"]);

    if (idSession.Length > 0)
        this.sessionID = idSession;
    else if (sessionid.Length > 0)
        this.sessionID = sessionid;
    else
        this.sessionID = sessionID;

}

private string ConvertToString(object obj, string defaultValue = "")
{
      if (obj == null) return defaultValue;

      return Convert.ToString(filterSameVariablesValue(obj));
}

如您所见,这两个函数的作用完全相同。唯一的区别是每个人接收的值的类型。

两个功能都在工作。我想要的是避免在两个函数中都有重复的代码。

有什么方法可以将它折叠成一个功能?例如,将 FormCollectionHttpRequest 转换为 Hashtable 并使用它?

最佳答案

您可以简单地期待一个 NameValueCollection 参数,它是两种类型(几乎)共有的:

private void SetUrlParameters(NameValueCollection data, string controllerName = "")
{
    string sessionID = ConvertToString(data["sessionID"]);
    string idSession = ConvertToString(data["idSession"]);
    string sessionid = ConvertToString(data["sessionid"]);

    if (idSession.Length > 0)
        this.sessionID = idSession;
    else if (sessionid.Length > 0)
        this.sessionID = sessionid;
    else
        this.sessionID = sessionID;
}
HttpRequest 的用法:
SetUrlParameters(request.Params);
FormCollection 的用法:
SetUrlParameters(formCollection);

MSDN

关于c# - 将 FormCollection && HttpRequest 转换为 Hashtable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46403102/

10-13 08:33