指定された名前の DataMember を持つプロパティを反射的に取得するにはどうすればよいですか (すべての DataMember に一意の名前があると仮定しましょう)。たとえば、次のコードでは、「p1」という名前の DataMember を持つプロパティは次のとおりですPropertyOne
。
[DataContract(Name = "MyContract")]
public class MyContract
{
[DataMember(Name = "p1")]
public string PropertyOne { get; set; }
[DataMember(Name = "p2")]
public string PropertyTwo { get; set; }
[DataMember(Name = "p3")]
public string PropertyThree { get; set; }
}
現在、私は持っています:
string dataMemberName = ...;
var dataMemberProperties = typeof(T).GetProperties().Where(p => p.GetCustomAttributes(typeof(DataMemberAttribute), false).Any());
var propInfo = dataMemberProperties.Where(p => ((DataMemberAttribute)p.GetCustomAttributes(typeof(DataMemberAttribute), false).First()).Name == dataMemberName).FirstOrDefault();
これは機能しますが、改善できるように感じます。GetCustomAttributes()
私は特にそれが2回呼び出されるのが好きではありません。
どうすればもっとうまく書き直すことができますか?理想的には、シンプルなワンライナーにできれば最高です。