关于枚举类型返回字符串的问题

hikeradam 2015-11-14 09:26:18
期望用枚举来返回字符串,这样可以做成强类型。
public enum BoolString
{
[EnumDescription("Y")]
TRUE,
[EnumDescription("N")]
FALSE ,
}
但遇到两个个问题:
1、如何用一个方法根据枚举的值返回这个字符串
BoolString boolString = BoolString.TRUE;
GetEnumDesc(typeof(BoolString), boolString);

2、如何根据字符串返回枚举的值。
string desc = "Y";
GetEnumValue(typeof(BoolString), desc);

如果实现这两个方法
...全文
383 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hikeradam 2015-11-22
  • 打赏
  • 举报
回复
shingoscar的方法很有用,谢谢了
crystal_lz 2015-11-16
  • 打赏
  • 举报
回复
为何一定要搞得这么纠结? 那你直接定义Y和N不就行了?。。。。而且 枚举本身也不是拿来干这个事情的
caojinrong 2015-11-14
  • 打赏
  • 举报
回复
如果枚举和Attribute定义如下

        public enum BoolString
        {
            [EnumDescription("Y")]
            TRUE,
            [EnumDescription("N")]
            FALSE,
        }

        public class EnumDescriptionAttribute : Attribute
        {
            private string desc;

            public string Description { get { return desc; } set { desc = value; } }

            public EnumDescriptionAttribute(string desc) { this.desc = desc; }
        }
你要的功能可实现为如下
        public static string GetEnumDesc(BoolString boolString)
        {
            foreach (FieldInfo fi in typeof(BoolString).GetFields())
            {
                if (fi.Name == boolString.ToString())
                {
                    EnumDescriptionAttribute attr = Attribute.GetCustomAttribute(fi, typeof(EnumDescriptionAttribute)) as EnumDescriptionAttribute;
                    if (attr != null)
                        return attr.Description;
                }
            }
            return null;
        }

        public static BoolString GetEnumValue(string desc)
        {
            foreach (FieldInfo fi in typeof(BoolString).GetFields())
            {
                EnumDescriptionAttribute attr = Attribute.GetCustomAttribute(fi, typeof(EnumDescriptionAttribute)) as EnumDescriptionAttribute;
                if (attr != null && attr.Description == desc)
                    return (BoolString)Enum.Parse(typeof(BoolString), fi.Name);
            }
            return 0;
        }
Poopaye 2015-11-14
  • 打赏
  • 举报
回复
我仔细想了想你还是这样定义吧 public enum BoolString { TRUE, FALSE , Y = TRUE, N = FALSE, }

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧