定义枚举类型的备注特性,作为数据展示使用
代码非常简单,只需要继承Attribute,写自定义属性即可
/// <summary>
/// 备注特性
/// </summary>
public class RemarkAttribute : Attribute
{
public RemarkAttribute(string remark)
{
this.Remark = remark;
}
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
}
然后在枚举类型的每个字段上添加该属性标签
[DataContract]
public enum MongoLogicOp
{
/// <summary>
/// 满足所有组合条件
/// </summary>
[Remark( "$and")]
And,
/// <summary>
/// 满足任意组合条件
/// </summary>
[Remark("$or")]
Or
}
我们还需要编写 根据枚举字段获得其remark标签 以及其逆向过程
这样我们才能够使用自定义标签,让自定义标签发挥作用
接下来写一个枚举类型的扩展
扩展中包含两个扩展方法,可供方便使用
/// <summary>
/// 枚举扩展类
/// </summary>
public static class EnumExtension
{
/// <summary>
/// 获取枚举的备注信息
/// </summary>
/// <param name="em"></param>
/// <returns></returns>
public static string GetRemark(this Enum em)
{
Type type = em.GetType();
FieldInfo fd = type.GetField(em.ToString());
if (fd == null)
return string.Empty;
object[] attrs = fd.GetCustomAttributes(typeof(RemarkAttribute), false);
string name = string.Empty;
foreach (RemarkAttribute attr in attrs)
{
name = attr.Remark;
}
return name;
}
/// <summary>
/// 获取备注信息对应的枚举值
/// </summary>
/// <param name="remark"></param>
/// <returns></returns>
public static string ByRemark<T>(this string remark)
{
Type type = typeof(T);
FieldInfo[] fds = type.GetFields();
foreach (var fd in fds)
{
object[] attrs = fd.GetCustomAttributes(typeof(RemarkAttribute), false);
foreach (RemarkAttribute attr in attrs)
{
var name = attr.Remark;
if (name == remark)
return fd.Name;
}
}
return null;
}
}