如何使用语句System.Text.Encoding防止代码重复

时间:2014-09-04 16:21:42

标签: c# wpf

好的,我如何在这种特殊情况下防止代码重复

由于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

3 个答案:

答案 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();
}