いくつかの属性マークアップを使用するフレームワークに取り組んでいます。これは 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);
}
}