C# 是否有文件字节的.NET包装器?
NET中是否有文件字节的包装器 我不喜欢使用字节[]。对于文件字节,类型(byte[])没有给出足够的语义含义,因为并非所有byte[]都是文件字节。同时把它作为一个论点来传递也是令人不安的 我知道自己写那种包装纸很容易。e、 g:C# 是否有文件字节的.NET包装器?,c#,.net,types,C#,.net,Types,NET中是否有文件字节的包装器 我不喜欢使用字节[]。对于文件字节,类型(byte[])没有给出足够的语义含义,因为并非所有byte[]都是文件字节。同时把它作为一个论点来传递也是令人不安的 我知道自己写那种包装纸很容易。e、 g: public class FileBytes { public FileBytes ( byte[] value ) { Contract.Requires(value != null);
public class FileBytes
{
public FileBytes
(
byte[] value
)
{
Contract.Requires(value != null);
Contract.Requires(value.Length != 0);
this.Value = value;
}
public byte[] Value { get; private set; }
}
但我想知道是否有一些现成的解决方案。BCL中没有这样的东西。(或者,
流
抽象就是您想要的?)
您的包装器与原始byte[]
存在相同的问题,即FileBytes
类型的变量可以是null
此外,我不明白为什么来自文件的字节与来自其他地方(例如,来自web)的字节会有任何不同。无论字节来自何处,对字节进行操作的代码都应该以相同的方式运行。据我所知,没有(除了图像等特殊情况)-因此,请继续使用您的领域知识,为流抽象获取一些自己的+1;对于文件I/O,这通常优于
字节[]
。从OP的描述来看,流
比字节[]
更符合OP的意图。大多数设计良好的用于处理文件的库都有一个重载,它接受流
(还有一个重载接受文件名)。这里要注意的主要问题是与字节[]
不同,流有状态;重复使用流
(例如,在使用流
后,位置
属性可能会更改)本身并不安全。类似地,Stream
在多线程中安全使用要困难得多。@usr我同意包装这对计算机或代码的操作方式没有任何影响,但我认为对人类有影响。在我看来,它可以使代码更“诚实”。)@kr85如果要在类型系统中记录某些属性,则包装没有问题。我只是很难看到记录这些字节来自文件而不是其他来源的价值。如果这些信息在你的领域很重要,那就千方百计去争取吧。如果字节必须具有某种文件格式,或者不是零长度或类似的格式,我认为这是有意义的。