我正在开发一个使用一些属性标记的框架。这将在 MVC 项目中使用,并且大约会在我每次查看视图中的特定记录时发生(例如 /Details/5)
我想知道是否有更好/更有效的方法来做到这一点或一个好的最佳实践示例。
无论如何,我有几个属性,例如:
[Foo("someValueHere")]
String Name {get;set;}
[Bar("SomeOtherValue"]
String Address {get;set;}
寻找这些属性/按照它们的价值行事的最有效方法/最佳实践是什么?
我目前正在做这样的事情:
[System.AttributeUsage(AttributeTargets.Property)]
class FooAttribute : Attribute
{
public string Target { get; set; }
public FooAttribute(string target)
{
Target = target;
}
}
在我对这些属性采取行动的方法中(简化示例!):
public static void DoSomething(object source)
{
//is it faster if I make this a generic function and get the tpe from T?
Type sourceType = source.GetType();
//get all of the properties marked up with a foo attribute
var fooProperties = sourceType
.GetProperties()
.Where(p => p.GetCustomAttributes(typeof(FooAttribute), true)
.Any())
.ToList();
//go through each fooproperty and try to get the value set
foreach (var prop in fooProperties)
{
object value = prop.GetValue(source, null);
// do something with the value
prop.SetValue(source, my-modified-value, null);
}
}