C# 类和枚举的类型转换器

C# 类和枚举的类型转换器,c#,type-conversion,C#,Type Conversion,我有一个类声明和一个枚举角色 我经常需要将声明转换为角色或相反 通常我也会将List转换为List或相反 在这种情况下,角色是以下枚举: public enum Role { Leader = 1, Editor = 2 } // Role 注:为简单起见,仅包括2项 那么索赔是一个具有两个属性的类: public class Claim { public String Type { get; set; } public String Value { get; set; } }

我有一个
类声明
和一个
枚举角色

我经常需要将
声明
转换为
角色
或相反

通常我也会将
List
转换为
List
或相反

在这种情况下,角色是以下枚举:

public enum Role {
  Leader = 1,
  Editor = 2
} // Role
注:为简单起见,仅包括2项

那么索赔是一个具有两个属性的类:

public class Claim {
  public String Type { get; set; }
  public String Value { get; set; }
}
  • 角色
    转换为
    索赔

    Claim.Type=“Role”和Claim.Value={Role Text}(示例:Leader)

  • 角色
    转换为
    索赔

  • 仅适用于
    索赔
    哪种类型是
    角色

    在这些情况下,如果(1),则转换是相反的

    我不确定类型转换器是否是最佳解决方案

    但我想以某种方式使这些转换尽可能简单

    一些可重用的东西,因为我经常需要进行这种转换

    也许是延期?助手?类型转换器

    如何为此创建和使用类型转换器

    你只是在看书

    如何为此创建和使用类型转换器


    您只需阅读。

    类型转换器不是您想要的,它的实现往往更密集,更迟钝,并且允许您似乎不需要的设计时功能。如果您的目标是允许使用这些对象的人以最少的代码在这两个对象之间移动,那么您可以定义隐式转换(或者显式转换,如果您想要强制转换语法)

    这样做将允许以下代码工作,因为它将利用您定义的转换

    Claim claim = Role.Leader;
    Role role = claim;  
    
    更新

    你在评论中说你不能碰索赔类。那么,最简单的方法可能是扩展方法

    static class ClaimExtensions
    {
        public static Role ToRole(this Claim claim)
        {
            return (Role)Enum.Parse(typeof(Role), claim.Value);
        }
        public static Claim ToClaim(this Role role)
        {
            return new Claim() { Type = "Role", Value = role.ToString() };
        }
    }
    
    这意味着一个方法调用,但对于开发人员来说,使用和理解它是相当简单的

    Claim claim = Role.Leader.ToClaim();
    Role role = claim.ToRole();
    

    TypeConverter不是您想要的,它的实现往往更密集,更迟钝,并且允许您似乎不需要的设计时功能。如果您的目标是允许使用这些对象的人以最少的代码在这两个对象之间移动,那么您可以定义隐式转换(或者显式转换,如果您想要强制转换语法)

    这样做将允许以下代码工作,因为它将利用您定义的转换

    Claim claim = Role.Leader;
    Role role = claim;  
    
    更新

    你在评论中说你不能碰索赔类。那么,最简单的方法可能是扩展方法

    static class ClaimExtensions
    {
        public static Role ToRole(this Claim claim)
        {
            return (Role)Enum.Parse(typeof(Role), claim.Value);
        }
        public static Claim ToClaim(this Role role)
        {
            return new Claim() { Type = "Role", Value = role.ToString() };
        }
    }
    
    这意味着一个方法调用,但对于开发人员来说,使用和理解它是相当简单的

    Claim claim = Role.Leader.ToClaim();
    Role role = claim.ToRole();
    
    如果您想“获取”或基于另一个的值创建一个,您可以选择两种方式:

    1-要从枚举到类,我将使用工厂方法。传入枚举并返回适当类型的类

    2-我将声明“Type”属性更改为Role类型的枚举,以便您可以立即检索与caim关联的枚举值

    如果由于“Type”可能包含不在角色enum中的值而无法工作,那么我将添加一个可能为null的Role类型的属性。

    如果您希望“获取”或基于另一个类型的值创建一个属性,则可以执行以下两项操作:

    1-要从枚举到类,我将使用工厂方法。传入枚举并返回适当类型的类

    2-我将声明“Type”属性更改为Role类型的枚举,以便您可以立即检索与caim关联的枚举值


    如果由于“Type”可能包含不在角色枚举中的值,因此无法工作,那么我将添加一个可能为null的Role类型的属性。

    如果没有任何代码,我认为任何人都无法回答您的问题。您能否添加一些代码来显示如何来回翻译它们?我刚刚更新了帖子并添加了代码。没有任何代码,我想没有人能回答你。你能添加一些代码来显示你如何来回翻译它们吗?我刚刚更新了我的帖子并添加了代码。这是一个很好的。。。但是如果我不能在Claim类中做任何事情。。。这是一门.NET课程。也许是一个扩展的方式。这是一个很好的。。。但是如果我不能在Claim类中做任何事情。。。这是一门.NET课程。也许是一种延伸。