使用EnumMemberAttribute和自动做字符串转换 [英] Using EnumMemberAttribute and doing automatic string conversions
本文介绍了使用EnumMemberAttribute和自动做字符串转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下代码
[DataContract]
公共枚举StatusType
{
〔EnumMember(VALUE =A)
所有,
[EnumMember(VALUE =I)]
进程内,
[EnumMember(VALUE =C) ]
齐全,
}
我要做到以下几点:
变种s =C;
StatusType状态= SerializerHelper.ToEnum< StatusType>(S); //现在状态StatusType.Complete
串newString = SerializerHelper.ToEnumString< StatusType>(状态); // newString现在是C
我做了使用的DataContractSerializer(请参见下面的代码的第二部分),但似乎很多工作。
我失去了一些东西明显?想法?谢谢
公共静态字符串ToEnumString< T>(T型)
{
字符串s;
使用(VAR毫秒=新的MemoryStream())
{
变种SER =新的DataContractSerializer(typeof运算(T));
ser.WriteObject(MS,类型);
ms.Position = 0;
变种SR =新的StreamReader(毫秒);
S = sr.ReadToEnd();使用
}
(VAR XML =新的XmlTextReader(S,XmlNodeType.Element,NULL))
{
xml.MoveToContent();
xml.Read();
返回xml.Value;
}
}
解决方案
下面是我的主张 - 它应该给你如何做到这一点(检查还获取属性枚举的想法值):
公共静态字符串ToEnumString< T>(T型)
{
VAR enumType = typeof运算(T);
变种名称= Enum.GetName(enumType,类型);
VAR enumMemberAttribute =((EnumMemberAttribute [])enumType.GetField(名称).GetCustomAttributes(typeof运算(EnumMemberAttribute),真))单();
返回enumMemberAttribute.Value;
}
公共静态牛逼ToEnum< T>(字符串str)
{
VAR enumType = typeof运算(T);
的foreach(在Enum.GetNames(enumType VAR名))
{
VAR enumMemberAttribute =((EnumMemberAttribute [])enumType.GetField(名称).GetCustomAttributes(typeof运算(EnumMemberAttribute),真) )。单();
如果(enumMemberAttribute.Value == STR)回报(T)Enum.Parse(enumType,名);
}
//抛出异常或处理任何你想要或
返回默认值(T);
}
I have the following code
[DataContract]
public enum StatusType
{
[EnumMember(Value = "A")]
All,
[EnumMember(Value = "I")]
InProcess,
[EnumMember(Value = "C")]
Complete,
}
I'd like to do the following:
var s = "C";
StatusType status = SerializerHelper.ToEnum<StatusType>(s); //status is now StatusType.Complete
string newString = SerializerHelper.ToEnumString<StatusType>(status); //newString is now "C"
I've done the second part using DataContractSerializer (see code below), but it seems like a lot of work.
Am I missing something obvious? Ideas? Thanks.
public static string ToEnumString<T>(T type)
{
string s;
using (var ms = new MemoryStream())
{
var ser = new DataContractSerializer(typeof(T));
ser.WriteObject(ms, type);
ms.Position = 0;
var sr = new StreamReader(ms);
s = sr.ReadToEnd();
}
using (var xml = new XmlTextReader(s, XmlNodeType.Element, null))
{
xml.MoveToContent();
xml.Read();
return xml.Value;
}
}
解决方案
Here is my proposition - it should give you the idea on how to do this (check also Getting attributes of Enum's value):
public static string ToEnumString<T>(T type)
{
var enumType = typeof (T);
var name = Enum.GetName(enumType, type);
var enumMemberAttribute = ((EnumMemberAttribute[])enumType.GetField(name).GetCustomAttributes(typeof(EnumMemberAttribute), true)).Single();
return enumMemberAttribute.Value;
}
public static T ToEnum<T>(string str)
{
var enumType = typeof(T);
foreach (var name in Enum.GetNames(enumType))
{
var enumMemberAttribute = ((EnumMemberAttribute[])enumType.GetField(name).GetCustomAttributes(typeof(EnumMemberAttribute), true)).Single();
if (enumMemberAttribute.Value == str) return (T)Enum.Parse(enumType, name);
}
//throw exception or whatever handling you want or
return default(T);
}
这篇关于使用EnumMemberAttribute和自动做字符串转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文