我正在使用使用char []数组存储属性的旧(> 15年)系统,如果索引具有" 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视图中并在页面上进行迭代。
谢谢!
答案 0 :(得分:2)
将此作为整数后,您可以转换回枚举并使用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);
这将打印您指定的输出,即:
John的帐户有选项A
John的帐户有选项B
John的帐户有选项C