我有两个函数,一个接收 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));
}
如您所见,这两个函数的作用完全相同。唯一的区别是每个人接收的值的类型。
两个功能都在工作。我想要的是避免在两个函数中都有重复的代码。
有什么方法可以将它折叠成一个功能?例如,将
FormCollection
和 HttpRequest
转换为 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/