Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HttpWebRequest集合初始值设定项C#_C#_.net_Httpwebrequest_Webrequest_System.net.httpwebrequest - Fatal编程技术网

HttpWebRequest集合初始值设定项C#

HttpWebRequest集合初始值设定项C#,c#,.net,httpwebrequest,webrequest,system.net.httpwebrequest,C#,.net,Httpwebrequest,Webrequest,System.net.httpwebrequest,通过HttpWebRequest.Create(url)使用HttpWebRequest时,是否有比以下更简单的方法通过使用对象初始值设定项初始化HttpWebRequest: class RequestLight { public HttpWebRequest WebRequestObj; public RequestLight(string url) { WebRequestObj = HttpWebRequest.CreateHttp(url);

通过HttpWebRequest.Create(url)使用HttpWebRequest时,是否有比以下更简单的方法通过使用对象初始值设定项初始化HttpWebRequest:

class RequestLight
{
    public HttpWebRequest WebRequestObj;

    public RequestLight(string url)
    {
        WebRequestObj = HttpWebRequest.CreateHttp(url);
    }

}
现在可以这样使用(webreq对象的对象初始值设定项的预期效果)

我错过什么了吗?或者这是获得预期效果的最简单方法


注意:使用最初的方法,您必须设置通过静态方法创建对象,然后逐个分配每个属性。

听起来您正在寻找一种方法来在一条语句中初始化请求,否则只使用两条语句更简单

有一个相当简单的替代方法,使用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;
    x.Date = DateTime.UtcNow;
});

你是指对象初始值设定项,而不是集合初始值设定项。但不清楚为什么您首先要使用
RequestLight
。为什么不只做两个陈述呢
var-request=HttpWebRequest.CreateHttp(url);request.CookieContainer=null是的,我指的是对象初始值设定项。这是为了方便(而且对象初始值设定项处理起来更干净)。构建的应用程序和工具都会分析web属性,因此需要以最佳方式初始化请求。如果必须在单个表达式中进行初始化,则对象初始值设定项更易于处理。但是如果它是一个普通的局部变量,我会说你的语法比两个语句要简单得多。我认为,我的答案中的建议不那么晦涩难懂(而且更加笼统),但在大多数情况下,我可能仍然会使用两种说法。@JonSkeet这更像是一种模式。当初始化对象时,整个代码库+最佳实践都希望所有属性都已计算出来。当对象为init.时,将对其进行配置,甚至还会在同一行中发出请求。与每个开发人员先创建一个web请求对象,然后配置它,再调用它相比,它更易于管理。与Obj。伊尼。当站点拒绝您的请求时,您不必遵循开发人员正在进行的web请求对象跟踪,它会在一个位置进行配置和发送。我还应该补充一点,在示例中只分配了一个属性,但通常会有更多属性。
var request = WebRequest.CreateHttp(uri)
    .Initialize(x => x.CookieContainer = null);
var request = WebRequest.CreateHttp(uri).Initialize(x => {
    x.CookieContainer = null;
    x.Date = DateTime.UtcNow;
});