我有两个函数,一个功能是一个接收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
FormCollection是从NameValueCollection
继承。HttpRequest
具有HttpRequest.Form
属性,也是NameValueCollection
。因此,您可以使用转换为NameValueCollection
public void GetParameters(FormCollection form, HttpRequest request)
{
var parameters = Convert(form);
parameters = Convert(request.Parameters);
}
public YourParameters Convert(NameValueCollection form)
{
//your code here
}