我需要为一个方法编写一个单元测试,该方法采用来自文本文件的流。我想做这样的事情:

Stream s = GenerateStreamFromString("a,b \n c,d");

当前回答

ToStream扩展方法的现代化和轻微修改版本:

public static Stream ToStream(this string value) => ToStream(value, Encoding.UTF8);

public static Stream ToStream(this string value, Encoding encoding) 
                          => new MemoryStream(encoding.GetBytes(value ?? string.Empty));

修改建议在@Palec的评论@肖恩鲍威的回答。


或者作为一行语句(由@satnhak建议):

public static Stream ToStream(this string value, Encoding encoding = null) 
    => new MemoryStream((encoding ?? Encoding.UTF8).GetBytes(value ?? string.Empty));

其他回答

给你:

private Stream GenerateStreamFromString(String p)
{
    Byte[] bytes = UTF8Encoding.GetBytes(p);
    MemoryStream strm = new MemoryStream();
    strm.Write(bytes, 0, bytes.Length);
    return strm;
}
public Stream GenerateStreamFromString(string s)
{
    return new MemoryStream(Encoding.UTF8.GetBytes(s));
}

我认为您可以从使用MemoryStream中受益。您可以使用使用Encoding类的GetBytes方法获得的字符串字节填充它。

我们使用下面列出的扩展方法。我认为您应该让开发人员对编码做出决定,这样就不会有什么神奇的事情发生。

public static class StringExtensions {

    public static Stream ToStream(this string s) {
        return s.ToStream(Encoding.UTF8);
    }

    public static Stream ToStream(this string s, Encoding encoding) {
        return new MemoryStream(encoding.GetBytes(s ?? ""));
    }
}

ToStream扩展方法的现代化和轻微修改版本:

public static Stream ToStream(this string value) => ToStream(value, Encoding.UTF8);

public static Stream ToStream(this string value, Encoding encoding) 
                          => new MemoryStream(encoding.GetBytes(value ?? string.Empty));

修改建议在@Palec的评论@肖恩鲍威的回答。


或者作为一行语句(由@satnhak建议):

public static Stream ToStream(this string value, Encoding encoding = null) 
    => new MemoryStream((encoding ?? Encoding.UTF8).GetBytes(value ?? string.Empty));