我使用的是一个旧的(>15年)系统,该系统使用char[]数组存储属性,如果索引有"X",则该属性被激活。我已经做了这么多转换它:
...
[Flags]
public enum PDMObjectFlags {
None = 0, // 000000
OptionA = 1, // 000001
OptionB = 2, // 000010
OptionC = 4, // 000100
OptionD = 8, // 001000
OptionE = 16, // 010000
OptionF = 32 // 100000
}
...
string userOptionsStr = " XXX"; // " XXX"
string userOptionsBin = userOptions
.Replace('X', '1')
.Replace(' ', '0'); // "000111"
int userOptionsInt =
Convert.ToInt32(userOptionsBin, 2); // 7
我如何最终得到允许我显示特定用户的所有属性的东西?类似这样的东西:
foreach (var x in userOptionsList){
Console.Write("John's account has " + x);
}
// Output:
//
// John's account has OptionA
// John's account has OptionB
// John's account has OptionC
很抱歉,如果这个例子很笨,我只是在这里打出来的。它最终将与模型一起传递到Razor视图中,并在页面上迭代。
谢谢!
一旦将其作为整数,就可以转换回枚举并使用ToString()
来提取名称列表。
给定枚举定义为(编译):
[Flags]
public enum PDMObjectFlags {
None = 0, // 000000
A = 1, // 000001
B = 2, // 000010
C = 4, // 000100
D = 8, // 001000
E = 16, // 010000
F = 32 // 100000
}
你可以用扩展你的代码
PDMObjectFlags flags = (PDMObjectFlags)userOptionsInt;
var names = flags.ToString().Split(new[] {',',' '}, StringSplitOptions.RemoveEmptyEntries);
foreach(var name in names)
Console.WriteLine("John's account has Option {0}", name);
这将打印您指定的输出,即:
约翰的账户有期权A
约翰的账户有选项B
约翰的账户有选项C