我需要在类中存储/公开原始二进制数据(二进制文件的内容)。我应该使用哪种类型?
到目前为止我考虑过的选项:
byte[]
这会生成warning CA1819:
即使属性是只读的,属性返回的数组也不受写保护。为了使数组不被篡改,该属性必须返回数组的副本。通常,用户不会理解调用此类属性对性能的负面影响。具体来说,他们可能会将该属性用作索引属性。
MemoryStream
MemoryStream
是IDisposable
,因此所有者将负责处置它,但是对MemoryStream
的引用可能会超过所有者。一种选择就是根本不需要处置该流,因为它不需要它。
MemoryStream
也不是线程安全的,应注意流的位置。消费者当然可以使用GetBuffer
,但这并不比选项1安全得多。
更新
ReadOnlyList<byte>
我担心表现。通常需要使用byte[]
将此二进制数据传递到外部代码中,以使byte[]
中的ReadOnlyList<byte>
具有性能影响。