【问题标题】:How to find empty bytes array如何找到空字节数组
【发布时间】:2011-06-30 09:22:39
【问题描述】:

如何判断是字节数组有数据还是新创建的字节数组?

var Buffer = new byte[1000];
//How to find out is Buffer is empty or not?

【问题讨论】:

  • 难道没有像Buffer.isEmpty()这样的函数吗?
  • 空是什么意思?满零?
  • c#不提供这样的功能。
  • Buffer不是System下的关键字?我们可以将关键字声明为变量吗?

标签: c# arrays byte


【解决方案1】:

我假设“空”是指包含每个字节元素的默认值,如果这不是你的意思,请查看@sehe 的答案。

如何使用 LINQ 检查所有元素是否具有类型的默认值:

var Empty = Buffer.All(B => B == default(Byte));

【讨论】:

  • default(T) 只会在模板 IIRC 的上下文中有意义
  • @sehe:不,不管泛型如何,它都是一个完全有效的运算符。
  • .All() 上的 System.Buffer 方法不存在。即使我包含System.Linq
  • @Robula 我指的是问题中的缓冲区变量,而不是 system.buffer
【解决方案2】:

字节是值类型,不能为空;

创建数组会立即将元素初始化为元素类型的默认值。

这意味着,空单元格不能存在,更不用说被检测到了。

如果你必须:

  1. 使用可为空的类型

    var Buffer = new byte?[1000];

  2. 容量变化时使用Array.Resize。但是,您可能很快就会遇到只使用 System.Collections.Generic.List 效率更高的情况

【讨论】:

    【解决方案3】:

    除了给出的答案

                var buffer = new byte[1000];
                var bFree = true;
                foreach (var b in buffer)
                {
                    if (b == default(byte)) continue;
                    bFree = false;
                    break;
                }
    

    【讨论】:

      猜你喜欢
      • 2012-07-07
      • 1970-01-01
      • 2011-12-07
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 2020-10-02
      相关资源
      最近更新 更多