0

При использовании HttpWebRequest через HttpWebRequest.Create (URL) есть более простой способ, чем следующие инициализировать HttpWebRequest с помощью инициализатора объекта:коллекция HttpWebRequest Initializer 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; ' –

+0

Да, я имел в виду инициализатор объекта. И это для удобства (и инициализатор объекта намного чище, чтобы иметь дело). Желательно, чтобы приложения и инструменты строили все аналитические веб-свойства, поэтому желательно инициализировать запрос оптимальным способом. – Curtis

+0

Инициализатор объекта является чище, чтобы иметь дело с *, если * вы находитесь в ситуации, когда вам нужно сделать это в одном выражении. Но если это простая локальная переменная, я бы сказал, что синтаксис, который у вас есть, значительно меньше, чем просто два оператора. Предложение в моем ответе немного менее неясное, я думаю (и более общее), но я бы, вероятно, все еще использовал два утверждения в большинстве случаев. –

ответ

1

Похоже, вы ищете способ инициализации запроса в одном заявлении, иначе просто использование двух операторов проще.

Там есть достаточно простой альтернативой этому, с помощью лямбда-выражения - хотя это довольно противно ...

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