我有以下方法,都返回不同的类型.我有四种这样的方法.本着良好编程实践(DRY)的精神,应该在这里使用一些OOP技术,例如继承或接口,或者只是使用它.欢迎任何评论或代码示例.谢谢.
static AttendeeResponse GetAttendees(HttpWebRequest request)
{
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
try
{
XmlSerializer ser = new XmlSerializer(typeof(AttendeeResponse));
return (AttendeeResponse)ser.Deserialize(resp.GetResponseStream());
}
catch(Exception e)
{
error = e.InnerException.ToString();
return null;
}
}
static MemberResponse GetMembers(HttpWebRequest request)
{
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
try
{
XmlSerializer ser = new XmlSerializer(typeof(MemberResponse));
return (MemberResponse)ser.Deserialize(resp.GetResponseStream());
}
catch (Exception e)
{
error = e.InnerException.ToString();
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 13
怎么样:
// TODO: Improve the name :)
static T FetchItem<T>(HttpWebRequest request)
{
using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse())
{
try
{
XmlSerializer ser = new XmlSerializer(typeof(T));
return (T) ser.Deserialize(resp.GetResponseStream());
}
catch (Exception e)
{
error = e.InnerException.ToString();
return default(T);
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我已经包含了一个using法规,以避免泄漏连接.根据文档,您也不需要关闭流.
将return null不得不改变到return default(T)的情况下T是一个非空值类型; 另一种方法是T使用where T : class作为方法声明的一部分来限制为引用类型.
像这样使用它:
MemberResponse members = FetchItem<MemberResponse>(request);
...
AttendeeResponse attendee = FetchItem<AttendeeResponse>(request);
Run Code Online (Sandbox Code Playgroud)