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