convert an enum to another type of enum

前端 未结 15 1601
感动是毒
感动是毒 2020-11-30 02:36

I have an enum of for example \'Gender\' (Male =0 , Female =1) and I have another enum from a service which has its own Gender enum (Male =0

15条回答
  •  暗喜
    暗喜 (楼主)
    2020-11-30 03:08

    I know that's an old question and have a lot of answers, However I find that using a switch statement as in the accepted answer is somewhat cumbersome, so here are my 2 cents:

    My personal favorite method is to use a dictionary, where the key is the source enum and the value is the target enum - so in the case presented on the question my code would look like this:

    var genderTranslator = new Dictionary();
    genderTranslator.Add(TheirGender.Male, MyGender.Male);
    genderTranslator.Add(TheirGender.Female, MyGender.Female);
    genderTranslator.Add(TheirGender.Unknown, MyGender.Unknown);
    
    // translate their to mine    
    var myValue = genderTranslator[TheirValue];
    
    // translate mine to their
    var TheirValue = genderTranslator .FirstOrDefault(x => x.Value == myValue).Key;;
    

    Of course, this can be wrapped in a static class and be used as an extension methods:

    public static class EnumTranslator
    {
    
        private static Dictionary GenderTranslator = InitializeGenderTranslator();
    
        private static Dictionary InitializeGenderTranslator()
        {
            var translator = new Dictionary();
            translator.Add(TheirGender.Male, MyGender.Male);
            translator.Add(TheirGender.Female, MyGender.Female);
            translator.Add(TheirGender.Unknown, MyGender.Unknown);
            return translator;
        }
    
        public static MyGender Translate(this TheirGender theirValue)
        {
            return GenderTranslator[theirValue];
        }
    
        public static TheirGender Translate(this MyGender myValue)
        {
            return GenderTranslator.FirstOrDefault(x => x.Value == myValue).Key;
        }
    
    }
    

提交回复
热议问题