当通过HttpWebRequest.Create(url)使用HttpWebRequest时,使用对象初始化器初始化HttpWebRequest比以下更简单:
class RequestLight
{
public HttpWebRequest WebRequestObj;
public RequestLight(string url)
{
WebRequestObj = HttpWebRequest.CreateHttp(url);
}
}
现在可以像这样使用(webreq对象的对象初始化器的期望效果)
var obj = new RequestLight("http://google.com")
{ WebRequestObj = { CookieContainer = null } }.WebRequestObj;
我错过了什么吗?或者这是获得预期效果的最简单方法吗?
注意:使用原始方法设置通过静态方法创建对象,然后逐个分配每个属性。
答案 0 :(得分:1)
听起来你正在寻找一种在单个语句中初始化请求的方法 - 否则只使用两个语句就更简单了。
这是一个相当简单的替代方案,使用lambda表达式 - 虽然它非常讨厌......
public static class Extensions
{
public static T Initialize<T>(this T value, Action<T> initializer) where T : class
{
initializer(value);
return value;
}
}
并将其命名为:
var request = WebRequest.CreateHttp(uri)
.Initialize(x => x.CookieContainer = null);
或多个属性:
var request = WebRequest.CreateHttp(uri).Initialize(x => {
x.CookieContainer = null;
x.Date = DateTime.UtcNow;
});