我需要为一个方法编写一个单元测试,该方法采用来自文本文件的流。我想做这样的事情:
Stream s = GenerateStreamFromString("a,b \n c,d");
我需要为一个方法编写一个单元测试,该方法采用来自文本文件的流。我想做这样的事情:
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));
其他回答
使用MemoryStream类,调用Encoding。GetBytes首先将字符串转换为字节数组。
您随后是否需要流上的TextReader ?如果是这样,您可以直接提供一个StringReader,并绕过MemoryStream和Encoding步骤。
给你:
private Stream GenerateStreamFromString(String p)
{
Byte[] bytes = UTF8Encoding.GetBytes(p);
MemoryStream strm = new MemoryStream();
strm.Write(bytes, 0, bytes.Length);
return strm;
}
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));
public Stream GenerateStreamFromString(string s)
{
return new MemoryStream(Encoding.UTF8.GetBytes(s));
}
将此添加到静态字符串实用程序类:
public static Stream ToStream(this string str)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(str);
writer.Flush();
stream.Position = 0;
return stream;
}
这增加了一个扩展函数,所以你可以简单地:
using (var stringStream = "My string".ToStream())
{
// use stringStream
}