Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有文件字节的.NET包装器?_C#_.net_Types - Fatal编程技术网

C# 是否有文件字节的.NET包装器?

C# 是否有文件字节的.NET包装器?,c#,.net,types,C#,.net,Types,NET中是否有文件字节的包装器 我不喜欢使用字节[]。对于文件字节,类型(byte[])没有给出足够的语义含义,因为并非所有byte[]都是文件字节。同时把它作为一个论点来传递也是令人不安的 我知道自己写那种包装纸很容易。e、 g: public class FileBytes { public FileBytes ( byte[] value ) { Contract.Requires(value != null);

NET中是否有文件字节的包装器

我不喜欢使用字节[]。对于文件字节,类型(byte[])没有给出足够的语义含义,因为并非所有byte[]都是文件字节。同时把它作为一个论点来传递也是令人不安的

我知道自己写那种包装纸很容易。e、 g:

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如果要在类型系统中记录某些属性,则包装没有问题。我只是很难看到记录这些字节来自文件而不是其他来源的价值。如果这些信息在你的领域很重要,那就千方百计去争取吧。如果字节必须具有某种文件格式,或者不是零长度或类似的格式,我认为这是有意义的。