创建字节数组重构

本文关键字:重构 数组 字节数 字节 创建 | 更新日期: 2023-09-27 18:08:52

我需要创建用于测试的字节数组。我实现了自己的解决方案,但不确定它是否是最佳的。

byte counter = 0;
Func<int, byte[]> createByteArray = size =>
{
    var array = new byte[size];
    for (int index = 0; index < size; index++)
    {
        array[index] = counter++;
        if (counter == byte.MaxValue)
        {
            counter = 0;
        }
    }
    return array;
};

有什么方法可以简化这个吗?

创建字节数组重构

我不确定这是不是更好,但更短。

Func<int, byte[]> createByteArray = size => Enumerable.Range(0, size)
                                            .Select(i => (byte)(i % 256))
                                            .ToArray();

因为它是用于测试,所以您可以使用Random.NextBytes(...)创建一个完整的随机缓冲区。

如果没有,则不需要分支:

Func<int, byte[]> createByteArray = size =>
{
    var array = new byte[size];
    for (int index = 0; index < size; index++)
    {
        array[index] = (byte)(index & 0xFF);
    }
    return array;
};

你有c# !使用它!

byte counter = 0;
Func<int, byte[]> createByteArray = size =>
{
    var array = new byte[size];
    for (int index = 0; index < size; index++)
    {
        unchecked 
        {
            array[index] = counter++;
        }
    }
    return array;
};

不知道你为什么把counter放在外面。但如果你喜欢这样…

使用unchecked块允许数字溢出在那里。这将自动将您的值限制为byte范围内可能的值。

我不知道你生成的数组有多大。如果生成速度是一个问题,并且数组非常大,您只能手动填充值0到255,然后开始将卡盘复制到剩余的数组中。参见Array.ConstrainedCopy。但这只在数组生成太慢且数组非常大(n倍于Byte的范围)

时才有意义。