gpt4 book ai didi

c# - 在以下 C# 代码中使用关键字 USING 的正确方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 21:56:31 26 4
gpt4 key购买 nike

我正在努力纠正这一点,因为我觉得我遗漏了什么。每当我有一个 IDisposable 对象时,我都想使用关键字 using。请注意代码有效,我只是想优化它。

这里有两个问题:

1) 对于这段代码:

HttpWebRequest 请求 = (HttpWebRequest)WebRequest.Create(url);

这样添加(HttpWebRequest)是什么意思?我是否将 WebRequest 转换为 HttpWebRequest

为什么我不能这样做?

HttpWebRequest rq = new HttpWebRequest();
rq.Create(url);

2) 在下面的功能代码中,我将如何在适用的地方使用关键字 using

public static int UploadFileToixLibrary(string url, string file)
{
NetworkCredential credentials = new NetworkCredential();
credentials.UserName = AppVars.Username;
credentials.Password = AppVars.Password;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Credentials = credentials;
request.Method = "POST";
request.ContentType = "image/tiff";
request.Headers.Add("X-Object-Key", Path.GetFileName(file));

byte[] bytes = File.ReadAllBytes(file);
Stream st = null;

try
{
request.ContentLength = bytes.Length;
st = request.GetRequestStream();
st.Write(bytes, 0, bytes.Length);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return 1;
}
finally
{
if (st != null)
{
st.Close();
}
}

try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

StreamReader sr = new StreamReader(response.GetResponseStream());
response.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return 1;
}

return 0;
}

最佳答案

问题一:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

强制转换的原因是静态 Create WebRequest 上的方法返回一个 WebRequest 实例,它最适合您在 url 中提供的方案(即,http://地址将返回一个 HttpWebRequest,ftp://将返回 FtpWebRequest 等)。如您所知,您的 url 是 http,您知道您将返回一个 HttpWebRequest,因此您可以显式转换为正确的类型以访问额外的功能 HttpWebRequest抽象的 WebRequest

现在,WebRequest 不是IDisposable,因此您不能在 using 语句中使用它!

问题 2:在您的功能代码中,您唯一可以使用 using 语句的地方是 Stream 访问:

try
{
request.ContentLength = bytes.Length;
st = request.GetRequestStream();
st.Write(bytes, 0, bytes.Length);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return 1;
}
finally
{
if (st != null)
{
st.Close();
}
}

可以重写:

request.ContentLength = bytes.Length;   
using(var st = request.GetRequestStream())
{
st.Write(bytes, 0, bytes.Length);
st.Close();
}

关于c# - 在以下 C# 代码中使用关键字 USING 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11989928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com