gpt4 book ai didi

c# - 如何将枚举转换为字节数组?

转载 作者:太空宇宙 更新时间:2023-11-03 22:09:05 25 4
gpt4 key购买 nike

我有一个枚举如下:

[Flags]
public enum AggregationLevel
{
/// <summary>
/// 00000001
/// </summary>
Department = 1,

/// <summary>
/// 00000010
/// </summary>
Gbu = 2,

/// <summary>
/// 00000100
/// </summary>
Division = 4,

/// <summary>
/// 00001000
/// </summary>
Region = 8,

/// <summary>
/// 00010000
/// </summary>
Market = 16,

/// <summary>
/// 00100000
/// </summary>
Cluster = 32,

/// <summary>
/// 01000000
/// </summary>
Store = 64
}

然后我有一个需要 varbinary(字节数组)的存储过程参数。

我有一个应该传递给它的枚举实例:

AggregationLevel thisLevel = AggregationLevel.Department & AggregationLevel.Division;

然后,应该将值传递给此存储过程:

var parameter = new SqlParameter("@pBitMask", SqlDbType.VarBinary)

参数 = ?

如何将我的“thisLevel”枚举转换为字节数组,以便可以将其分配给此 sql 参数?

谢谢,

最佳答案

一些事情..

1) 您需要使用 OR 而不是 AND:

AggregationLevel thisLevel = AggregrationLevel.Department | AggregationLevel.Division;

2) 你可以使用这个序列,这样你就不必记住十进制的 2 的幂:

0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x100 ...

3) 最后,varbinary 不是您想要的。查看 integerbigint。枚举存储为 intlong,并且您受限于 intlong< 中的位数。如果你确实想存储在一个 varbinary 中,你需要将一个值序列化为一个字节串,这将取决于你是否想要 big-endian,应该使用多少字节存储 - 也许它甚至是可变的,等等。需要更多信息。

#3 的两个选项:

一个。如果只是你/代码在你的控制之下,不要使用 varbinary,使用 int 或 bigint(取决于所需的位数)。更好的是(可能),如果您要查询它们,请改用位字段

B.如果不是,DBA 或应用程序提供商将能够指定他们希望如何填充 varbinary

希望对您有所帮助。

关于c# - 如何将枚举转换为字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7331482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com