【问题标题】:how to convert IEnumerable<string> to byte[] in c#?如何在 C# 中将 IEnumerable<string> 转换为 byte[]?
【发布时间】:2020-01-21 08:54:16
【问题描述】:

如何在 c# 中将IEnumerable&lt;string&gt; 转换为byte[] c# 中是否有任何选项。 IEnumerable&lt;string&gt; 可能包含大量数据。 在每个字符串之后需要新行

【问题讨论】:

  • 不清楚您所说的“转换”是什么意思。如果您从 IEnumerable 中获取字符串“Hello”和“World”,您会如何期望得到的 byte[]?
  • 这可能是一个最好使用“writer” API 的场景;也许是一个StreamWriter - 然后只是循环(foreach)在字符串上,并为每个值使用.Write / .WriteLine。但是,如果不了解 你想用这些数据做什么,很难给出一个具体的例子。 byte[] 这里的目的是什么?
  • 让我想起了今天早些时候的this question。

标签: c# asp.net .net .net-core


【解决方案1】:
IEnumerable<string> myStrings = new[] { "hello", "world"};
var myBytes = myStrings.SelectMany(s => Encoding.UTF8.GetBytes(s)).ToArray();

这将使用UTF8 作为字节的编码。您可能需要使用不同的编码,具体取决于您之后要对字节执行的操作。

请注意 - 如上所述 - 这不是直接可逆的,因为您会丢失一个 string 结束位置和下一个开始位置的信息。

如果你愿意,你可以在每个字符串后面加上NewLine(或任何其他你可以用来分割的标识符)来保持它们分开:

var myBytes = myStrings.Select(s => s + Environment.NewLine)
                       .SelectMany(s => Encoding.UTF8.GetBytes(s)).ToArray();

有关SelectMany 的更多信息,请查看the documentation。

【讨论】:

  • 字符串结尾有什么可以添加换行符的吗?
  • 每个字符串之后?还是在最后?
  • 需要每个字符串之后
  • 一些它显示'System.OutOfMemoryException'类型的异常被抛出。 IEnumerable 可能包含大量数据
  • @RaZiQPS “在需要每个字符串之后”:您的问题中没有提到这一点。不要在 cmets 中添加要求,请edit您的问题说清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 2018-03-25
  • 2011-06-11
  • 1970-01-01
相关资源
最近更新 更多