如何使用与属性值相关的存储在枚举中的值更新集合的属性

时间:2015-07-22 19:08:27

标签: c# linq enums

标题可能令人困惑。但在这里,我将提供问题的完整图片。 我的回复是集体成员的集合。

public class Member
{
  public int Identifier {get;set;}
  public IEnumerable<string> Services {get;set}
}

在服务中我得到一些字符串形式的固定数值(如1,3,5,6,9),如下所述

Member m1= new Member();
m1.Services= new List<string>() {"1","3"}
Member m2= new Member();
m2.Services= new List<string>() {"5","9"}

我有一个枚举,它有一些与这些固定数值相对应的值,如下所述

public enum ServiceValues
{
  ABC=1,
  CDE=3,
  DEF=5,
  GHI=6,
  XYZ=9,
}

所以在m1.Services中我想返回{&#34; ABD&#34;,&#34; CDE&#34;}并在m2.Services中我想返回{&#34; DEF&#34;, &#34; XYZ&#34;}

虽然我知道一些肮脏的方式,但我想以最好的方式实现这一目标。

2 个答案:

答案 0 :(得分:2)

如果匿名类型对您来说足够好,并且假设您希望返回同时具有IdentifierServices列表的对象,则可以执行以下操作:

private Services ToService(string str)
{
    return (Services)Enum.Parse(typeof(Services), str);
}
...
var result = members.Select(member => new 
    {
        member.Identifier, 
        Services = members.Services.Select(ToService)
    });

答案 1 :(得分:-1)

您应该能够Enum.TryParse string集合中的值,然后使用生成的Services枚举值来获取文字名称。有点像:

var members = GetCollectionOfMember();

foreach(var member in members)
{
    foreach(var serviceString in member.Services)
    {
        Services service;
        if(Enum.TryParse<Services>(serviceString, out service))
        {
             var serviceName = service.ToString();
        }
    }
}