2013-05-03 65 views
0

我有一個class ClaimEnum Role類和轉換爲類和枚舉

我經常需要將Claim轉換爲Role或相反。

而且通常我還將List<Claim>轉換爲List<Role>或相反。

在這種情況下的作用是以下枚舉:

public enum Role { 
    Leader = 1, 
    Editor = 2 
} // Role 

注意:僅包括2項爲簡單起見。

然後,如權利要求是具有兩個屬性的類:

public class Claim { 
    public String Type { get; set; } 
    public String Value { get; set; } 
} 
  1. 轉換RoleClaim

    Claim.Type = "Role" and Claim.Value={Role Text} (Example: Leader)

  2. 轉換RoleClaim

僅適用於Claims,其類型爲Role

在這些情況下的轉換是逆如果(1)

我不知道,如果一個類型轉換器是最好的解決方案。

但我想以某種方式使這些轉換儘可能簡單。

可重用的東西,因爲我經常需要做這種轉換。

也許是擴展名?幫手?類型轉換器?

+0

沒有任何代碼,我不認爲有人能夠回答你。 – 2013-05-03 21:07:16

+0

你可以添加一些代碼來顯示你如何來回翻譯它們嗎? – zimdanen 2013-05-03 21:07:26

+0

我剛更新了我的文章並添加了代碼。 – 2013-05-03 21:23:31

回答

6

TypeConverter並不是您想要的,它的實現往往更密集,更隱蔽,並且允許設計時功能似乎並不需要。如果您的目標是允許某人使用這些對象在需要最少代碼的情況下在兩者之間移動,則可以定義隱式轉換(如果要強制轉換語法,則可以定義一個明確的轉換)。

public class Claim 
{ 
    public String Type { get; set; } 
    public String Value { get; set; } 

    public static implicit operator Role(Claim claim) 
    { 
     return (Role)Enum.Parse(typeof(Role), claim.Value); 
    } 
    public static implicit operator Claim(Role role) 
    { 
     return new Claim() { Type = "Role", Value = role.ToString() }; 
    } 
} 

這樣做會允許下面的代碼工作,因爲它會利用您定義的轉換。

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(); 
+0

這是一個很好的...但是,如果我不能在Claim類中做任何事......這是一個.NET類。也許延伸是方式。 – 2013-05-03 21:42:20

+0

@Shapper我已經更新瞭解決該問題的答案。 – 2013-05-03 21:50:07

0

如果你想「取」,或根據其他價值創造的,你可以到兩件事情:

1 - 從一個枚舉去上課,我會用一個廠方法。傳入一個枚舉並返回一個適當類型的類。

2 - 我會將聲明「Type」屬性更改爲Role類型的枚舉,以便您可以立即檢索與caim關聯的枚舉值。

如果這不能工作,因爲「類型」可能擁有不在角色枚舉中的值,那麼我會添加一個可能爲null類型的屬性Role。