好的,我如何在这种特殊情况下防止代码重复
由于streamreader字符编码而发生重复。
在某些情况下,我想使用默认值,在某些情况下我想自己定义。
irCustomEncoding
是一个整数
当我不提供编码默认情况下应用程序执行的操作时?
using (Stream strumien = response.GetResponseStream())
{
if (irCustomEncoding == 0)
{
using (StreamReader sr = new StreamReader(strumien))
{
srBody = sr.ReadToEnd();
}
}
else
{
using (StreamReader sr = new StreamReader(
strumien, System.Text.Encoding.GetEncoding(irCustomEncoding)))
{
srBody = sr.ReadToEnd();
}
}
}
所以我要问的是我如何编写单using (StreamReader...
而不是复制代码
c#wpf .net 4.5
答案 0 :(得分:5)
var sr = irCustomEncoding == 0
? new StreamReader(strumien)
: new StreamReader(strumien, Encoding.GetEncoding(irCustomEncoding));
using (sr)
{
}
答案 1 :(得分:3)
如果您没有其他人,请使用Encoding.UTF8
:
var encoding = irCustomEncoding == 0 ? Encoding.UTF8
: Encoding.GetEncoding(irCustomEncoding);
using (TextReader reader = new StreamReader(strumien, encoding))
{
srBody = reader.ReadToEnd();
}
(如果您没有为Encoding.UTF8
指定编码,则StreamReader
是默认设置。)
或者,你可以通过codepage number获得UTF8:
var codePage = irCustomEncoding == 0 ? Encoding.UTF8.CodePage : irCustomEncoding;
var encoding = Encoding.GetEncoding(codePage);
// Rest of the code as before
using (...)
{
...
}
答案 2 :(得分:1)
首先,多个using
根本不是代码重复。
但是你可以简单地说:
Stream strumien;
StreamReader sr;
try
{
sr = irCustomEncoding == 0 ? StreamReader sr = new StreamReader(strumien) : StreamReader sr = new StreamReader(...);
if (irCustomEncoding == 0)
{
srBody = sr.ReadToEnd();
}
else
{
// use sr
}
}
finally
{
strumien.Dispose();
sr.Dispose();
}