是否有智能方法来识别按位枚举的顺序?
以此枚举为例:
[System.FlagsAttribute()]
internal enum AnswersSort : int
{
None = 0,
Bounty = 1,
MarkedAnswer = 2,
MostVotes = 4
}
如果我以不同的方式结合这些:
var result = AnswersSort.MarkedAnswer | AnswersSort.MostVotes | AnswersSort.Bounty;
result = AnswersSort.MostVotes | AnswersSort.Bounty | AnswersSort.MarkedAnswer;
两个结果都是7,订单丢失。有没有办法在不使用数组或列表的情况下执行此操作?理想情况下,我正在寻找使用枚举的解决方案,但我不确定如何或是否可能。
答案 0 :(得分:1)
如果您有10个值,则每个项目需要4位。您可以将组合视为单个40位值,每位数编码4位。所以,给出两个例子:
0010 0100 0001
---- ---- ----
| | - Bounty
| - MostVotes
- MarkedAnswer
第一个将被编码为
long first = BuildValue(AnswersSort.MarkedAnswer, AnswersSort.MostVotes, AnswersSort.Bounty);
long BuildValue(params AnswersSort[] values)
{
long result = 0;
foreach (var val in values)
{
result = result << 4;
result |= (int)val;
}
return result;
}
您可以使用64位整数构建它:
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DQT_QML_DEBUG ")