我正在使用旧的(> 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句