0

当通过HttpWebRequest.Create(URL)使用HttpWebRequest的是有比下面通过使用对象初始化初始化HttpWebRequest的更简单的方法:HttpWebRequest的集合初始化C#

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

您的意思是一个对象初始值设定项,而不是一个集合初始值设定项。但不清楚为什么你首先获得了“RequestLight”。为什么不只是有两个陈述? 'var request = HttpWebRequest.CreateHttp(url); request.CookieContainer = null;' – 2014-10-09 20:35:33

+0

是的,我的意思是对象初始值设定项。这是为了方便(并且对象初始化器处理起来要干净得多)。所有构建的应用程序和工具都会分析Web属性,因此需要以最佳方式初始化请求。 – Curtis 2014-10-10 02:46:05

+0

对象初始值设定器处理*是否更清晰,如果您处于必须在单个表达式中执行操作的情况。但是,如果它是一个普通的局部变量,那么我认为你得到的语法明显比不两个语句更方便。我的答案中的建议不太模糊,我认为(和更普遍),但在大多数情况下,我可能仍会使用两个语句。 – 2014-10-10 08:57:57

回答

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; 
});