您的位置:首页 > 编程语言 > C#

C# 自定义特性

2015-11-20 15:19 441 查看


//自定义特性类
[System.AttributeUsage(System.AttributeTargets.Field |System.AttributeTargets.Enum)]
publicclass PropertiesDesc : System.Attribute

{

public string Desc { get; set; }

public PropertiesDesc(string desc)

{

Desc = desc;

}


}

public class PropertiesUtils

{

private static Dictionary<Type,Dictionary<string, string>> cache = new Dictionary<Type,Dictionary<string, string>>();

public static string GetDescByProperties(object p)

{

var type = p.GetType();

if (!cache.ContainsKey(type))

{

Cache(type);

}

var fieldNameToDesc = cache[type];

var fieldName = p.ToString();

returnfieldNameToDesc.ContainsKey(fieldName) ? fieldNameToDesc[fieldName] :string.Format("Can not found such desc for field `{0}` in type`{1}`", fieldName, type.Name);

}

private static void Cache(Type type)

{

var dict = new Dictionary<string,string>();

cache.Add(type, dict);

var fields = type.GetFields();

foreach (var field in fields)

{

var objs =field.GetCustomAttributes(typeof(PropertiesDesc), true);

if (objs.Length > 0)

{

dict.Add(field.Name, ((PropertiesDesc)objs[0]).Desc);

}

}

}

}

//枚举对象
public enumWeekday

{

[PropertiesDesc("星期一")]

Monday = 1,

[PropertiesDesc("星期二")]

Tuesday = 2,

[PropertiesDesc("星期三")]

Wednesday = 3,

[PropertiesDesc("星期四")]

Thursday = 4,

[PropertiesDesc("星期五")]

Friday = 5,

[PropertiesDesc("星期六")]

Saturday = 6,

[PropertiesDesc("星期日")]

Sunday = 6

}


调用:
var str =PropertiesUtils.GetDescByProperties(Weekday.Friday);

Console.Write(str);


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: