如何反思性地获取具有给定名称的 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()
被调用两次。
如何更好地重写它?理想情况下,如果我能把它做成一个简单的单线就太好了。