繁体   English   中英

是否可以获取一个枚举列表并将其转换为另一个?

[英]Is It possible to take one enum list and convert it to another?

我想获取提供的enum列表并将其转换为我的列表。 我从服务类型获取列表,然后我想通过DocumentFieldTypeConverter()将其转换为我的FieldTyp

但是,这个凹痕有效,因为此时enum无效dic.Add(i, Enum.GetName(rgl, FieldType)); 我第一次尝试这个,如果这完全是胡说八道,我深表歉意。 在此之前,我只使用过开关控制,但我认为可能会有更好的东西

class Program {
  static void Main(string[] args) {
    var x = new Type().DocumentFieldTypeConverter();
    foreach(var kvp in x) {
      Console.WriteLine($ "{kvp.Key}:   {kvp.Value}");
    }

    Console.ReadLine();
  }
}

public static class EnumExtension {
  public static Dictionary < int,
  FieldType > DocumentFieldTypeConverter(this Type rglFieldType) {
    var dic = new Dictionary < int,
    FieldType > ();
    var rgl = type.GetType();
    foreach(int i in Enum.GetValues(rgl)) {
      dic.Add(i, Enum.GetName(rgl, FieldType));
    }

    return dic;

  }
}

public enum FieldType {
  Document_Class_Code,
  Document,
  Document_Number,
  DocumentType,
  Passport_Number,
  Invitation_Number,
}

public enum Type {
  Document_Class_Code,
  Document,
  Document_Number,
  DocumentType,
  Passport_Number,
  Invitation_Number,

}

Type是一个关键字,所以我建议为第二个枚举使用另一个名称。

这里有一些方法,我建议使用Enum.TryParse来检查转换。

public enum FieldType
{
    Document_Class_Code,
    Document,
    Document_Number,
    DocumentType,
    Passport_Number,
    Invitation_Number,
}

public enum FieldTypeCopy
{
    Document_Class_Code,
    Document,
    Document_Number,
    DocumentType,
    Passport_Number,
    Invitation_Number,

}

FieldType fieldType = FieldType.DocumentType;

// Explicit conversion using the order 
int i = (int)fieldType;
FieldTypeCopy fieldTypeCopy1 = (FieldTypeCopy)i;
Console.WriteLine("Copy 1: " + fieldTypeCopy1.ToString());


// Parse without check
FieldTypeCopy fieldTypeCopy2 = (FieldTypeCopy)Enum.Parse(typeof(FieldType), fieldType.ToString(), true);
Console.WriteLine("Copy 2: " + fieldTypeCopy2.ToString());


// Parse with check
if (Enum.TryParse(fieldType.ToString(), out FieldTypeCopy fieldTypeCopy3))
{
    Console.WriteLine("Copy 3: " + fieldTypeCopy3.ToString());
}
else
{
    Console.WriteLine("Unable to Parse value to enum");
}

使用下面的通用 function 来转换枚举 -

public static class EnumExtension
{
    public static Dictionary<int, TDestinationType> EnumTypeConverter<TSourceType, TDestinationType>() 
        where TSourceType : struct, IConvertible
        where TDestinationType : struct, IConvertible
    {
        var dictionary = new Dictionary<int, TDestinationType>();
        var sourceEnum = typeof(TSourceType);
        var sourceValues = Enum.GetValues(sourceEnum);
        foreach (int enumVal in sourceValues)
        {
            var enumString = enumVal.ToString();
            var destinationEnum = Enum.Parse(typeof(TDestinationType), enumString);
            dictionary.Add(enumVal, (TDestinationType)destinationEnum);
        }

        return dictionary;
    }
}

从 main 调用它为 -

    public static void Main(string[] args)
    {
        var enumVals = EnumExtension.EnumTypeConverter<Type, FieldType>();
        foreach (var enumVal in enumVals)
        {
            Console.WriteLine($"{enumVal.Key}:  {enumVal.Value}");
        }
    }

将枚举转换为列表<object><div id="text_translate"><p>首先,为了避免下意识的<em>“这是重复的”</em>陈述:关于序列化枚举有很多关于 SO 的问题。 但没有一个(我发现)处理具有描述的枚举,或者尝试将枚举转换为特定的 object。 (如果你能找到我错过的一个,那么我会接受这是重复的。)</p><p> 给定一个看起来像这样的枚举:</p><pre> public enum OptionType { [Description("Option A")] OptionA = 1, [Description("Option B")] OptionB = 2, Description("Option C")] OptionC= 3, }</pre><p> 我想将其转换为 JSON 字符串,如下所示:</p><pre> [ { "Id": "1", "Description": "Option A"}, { "Id": "2", "Description": "Option B"}, { "Id": "3", "Description": "Option C"} ]</pre><p> 我有这两个类:</p><pre> public class EnumList { public List&lt;EnumNameValue&gt; EnumNamesValues { get; set; } } public class EnumNameValue { public int Id { get; set; } public string Description { get; set; } }</pre><p> 我有一个看起来像这样的调用方法:</p><pre> EnumList enumList = EnumSerializer.EnumToJson&lt;OptionType&gt;();</pre><p> 最后(这是我需要帮助的地方):</p><pre> public static class EnumSerializer { public static EnumList EnumToJson&lt;T&gt;() where T: Enum { Type enumType = typeof(T); // &lt;--- WORKS.; Enum thisEnum1 = (T)Activator.CreateInstance(enumType); // &lt;--- DOES NOT WORK Enum thisEnum2 = (Enum)Activator,CreateInstance(enumType); // &lt;--- DOES NOT WORK // If I can get this far, I *THINK* I can figure it out from here } }</pre><p> 我已经有一个获取描述的 Enum 扩展,所以我不需要帮助。 我遇到的问题是thisEnum1和thisEnum2最终的值为0</p><p> <a href="https://i.stack.imgur.com/zRatA.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/zRatA.png" alt="在此处输入图像描述"></a></p><p> ( DistrictType是 Enum 的真实名称。)</p><p> 如何获得可以循环的枚举的实际实例?</p></div></object>

[英]Convert an Enum to a List<object>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从列表中获取值并将其转换为枚举 将标记的枚举转换为另一个枚举 将枚举转换为另一个枚举 将枚举转换为另一种类型的枚举 将一种类型的列表转换为另一种类型 将枚举转换为列表<object><div id="text_translate"><p>首先,为了避免下意识的<em>“这是重复的”</em>陈述:关于序列化枚举有很多关于 SO 的问题。 但没有一个(我发现)处理具有描述的枚举,或者尝试将枚举转换为特定的 object。 (如果你能找到我错过的一个,那么我会接受这是重复的。)</p><p> 给定一个看起来像这样的枚举:</p><pre> public enum OptionType { [Description("Option A")] OptionA = 1, [Description("Option B")] OptionB = 2, Description("Option C")] OptionC= 3, }</pre><p> 我想将其转换为 JSON 字符串,如下所示:</p><pre> [ { "Id": "1", "Description": "Option A"}, { "Id": "2", "Description": "Option B"}, { "Id": "3", "Description": "Option C"} ]</pre><p> 我有这两个类:</p><pre> public class EnumList { public List&lt;EnumNameValue&gt; EnumNamesValues { get; set; } } public class EnumNameValue { public int Id { get; set; } public string Description { get; set; } }</pre><p> 我有一个看起来像这样的调用方法:</p><pre> EnumList enumList = EnumSerializer.EnumToJson&lt;OptionType&gt;();</pre><p> 最后(这是我需要帮助的地方):</p><pre> public static class EnumSerializer { public static EnumList EnumToJson&lt;T&gt;() where T: Enum { Type enumType = typeof(T); // &lt;--- WORKS.; Enum thisEnum1 = (T)Activator.CreateInstance(enumType); // &lt;--- DOES NOT WORK Enum thisEnum2 = (Enum)Activator,CreateInstance(enumType); // &lt;--- DOES NOT WORK // If I can get this far, I *THINK* I can figure it out from here } }</pre><p> 我已经有一个获取描述的 Enum 扩展,所以我不需要帮助。 我遇到的问题是thisEnum1和thisEnum2最终的值为0</p><p> <a href="https://i.stack.imgur.com/zRatA.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/zRatA.png" alt="在此处输入图像描述"></a></p><p> ( DistrictType是 Enum 的真实名称。)</p><p> 如何获得可以循环的枚举的实际实例?</p></div></object> 将枚举转换为列表<string> 从一个列表中随机抽取一个项目并将其添加到另一个列表中 从列表中取出一项并将其导入另一个列表 转换列表 <Enum> 列表 <string>
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM