C#读取一个或多个整数值,并根据读取的整数为对象指定某些枚举属性
我有一个小问题,我似乎在任何地方都找不到答案。我会尽量简短明了 我有一个叫做exercises的类,它有一个enum,负责运动击中的身体部位。假设我们有C#读取一个或多个整数值,并根据读取的整数为对象指定某些枚举属性,c#,enums,flags,C#,Enums,Flags,我有一个小问题,我似乎在任何地方都找不到答案。我会尽量简短明了 我有一个叫做exercises的类,它有一个enum,负责运动击中的身体部位。假设我们有 Chest = 1 Shoulders = 2 Arms = 4 Legs = 8 Back = 16 到目前为止,我的类“exercise”有一个名称,这个枚举。从理论上讲,这应该会导致类似“胸部按压、手臂/背举、双腿”之类的情况 接下来我有一个类目录,它包含所有的练习,在这个类中有一个方法,叫做AddExercise。以下是代码片段:
Chest = 1
Shoulders = 2
Arms = 4
Legs = 8
Back = 16
到目前为止,我的类“exercise”有一个名称,这个枚举。从理论上讲,这应该会导致类似“胸部按压、手臂/背举、双腿”之类的情况
接下来我有一个类目录,它包含所有的练习,在这个类中有一个方法,叫做AddExercise。以下是代码片段:
public void AddExercise()
{
Exercise ToAdd = new Exercise();
Console.WriteLine("What is the name of the exercise?");
string name = Console.ReadLine();
ToAdd.name = name;
katalog.Add(ToAdd);
}
我想知道的是,包括“运动影响到哪些肌肉群?”,然后是一个多选择,包括提到的肌肉群。我的想法是它看起来像这样:
1. Chest
2. Shoulders
3. Arms
4. Legs
5. Back
6. That is all
只要这个人一直选择1-5,这个练习就会获得enum属性,然后在这个人选择6后退出循环,但我不知道如何完成这部分。从我所看到的大多数枚举中,它们主要用于字符串格式和解析,所以我不知道如何通过读取整数来分配属性。最难的部分是分配其中的几个。
顺便说一下,这是我的枚举:
[Flags]
public enum BodyParts : int
{
None = 0,
Chest = 1,
Shoulders = 2,
Biceps = 4,
Triceps = 8,
Back = 16,
Legs = 32
}
感谢您的回答。您可以使用一个查找表将字符串答案与枚举值连接起来
var lookup = new Dictionary<string,BodyParts > () {
{ "chest" , BodyParts .Chest},
{ "shoulders " , BodyParts .Shoulders}
...
};
使用
CheckedListBox
,其中项目是枚举的实例
var clb = new CheckedListBox();
foreach (BodyParts bp in Enum.GetValues(typeof(BodyParts)))
clb .Items.Add(bp);
然后,要获得所有选中项的标记组合,只需按位或(组合它们)。结果将是具有所有选定身体部位的位掩码
var result = clb.CheckedItems
.Cast<BodyParts>()
.Aggregate(BodyParts.None,
(current, bp) => current | bp);
var result=clb.CheckedItems
.Cast()
.骨料(车身零件。无,
(当前,bp)=>当前| bp);
您使用的前端技术是什么?MVC、WPF或WinForm?无论您使用什么技术,这都比简单一点。您可以通过enum.GetNames(typeof(BodyParts)).ToDictionary(n=>n,n=>enum.Parse(typeof(BodyParts),n))获得枚举列表;并添加前端逻辑以使用值进行多重绑定(WPF)或computedValue(MVC中的angular/ko.js)来映射标志值。比如说,胸部|肩部==3。
var result = clb.CheckedItems
.Cast<BodyParts>()
.Aggregate(BodyParts.None,
(current, bp) => current | bp);