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

本文关键字:内部 代码 Encoding 何使用 语句 System Text | 更新日期: 2023-09-27 18:20:37

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

由于流读取器字符编码而发生重复。

在某些情况下,我想

使用默认值,在某些情况下,我想定义自己。

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

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

var sr = irCustomEncoding == 0
    ? new StreamReader(strumien)
    : new StreamReader(strumien, Encoding.GetEncoding(irCustomEncoding));
using (sr)
{
}
如果您

没有其他的,请使用Encoding.UTF8

var encoding = irCustomEncoding == 0 ? Encoding.UTF8
                                     : Encoding.GetEncoding(irCustomEncoding);
using (TextReader reader = new StreamReader(strumien, encoding))
{
    srBody = reader.ReadToEnd();
}

(如果未指定StreamReader编码,则Encoding.UTF8是默认值。

或者,您可以通过代码页号获取 UTF8:

var codePage = irCustomEncoding == 0 ? Encoding.UTF8.CodePage : irCustomEncoding;
var encoding = Encoding.GetEncoding(codePage);
// Rest of the code as before
using (...)
{
    ...
}
首先,

多重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();
}