我有一个包含一些属性的类。某些特定属性使用属性进行修饰。例如:
public class CoreAddress
{
private ContactStringProperty _LastName;
[ChangeRequestField]
public ContactStringProperty LastName
{
//ContactStringProperty has a method SameValueAs(ContactStringProperty other)
get { return this._LastName; }
}
.....
}
我希望在我的类中有一个方法,它遍历此类的所有属性,过滤具有此自定义属性的方法并调用找到的属性的成员。这就是我到目前为止所做的:
foreach (var p in this.GetType().GetProperties())
{
//checking if it's a change request field
if (p.GetCustomAttributes(typeof(ChangeRequestFieldAttribute), false).Count() > 0)
{
MethodInfo method = p.PropertyType.GetMethod("SameValueAs");
//problem here
var res = method.Invoke(null, new object[] { other.LastName });
}
}
如果此方法是属性的实例方法,则必须提供目标(而不是代码中的null)。如何在运行时获取此类实例的特定属性?
答案 0 :(得分:1)
由于您已拥有PropertyInfo,因此可以调用GetValue method
。所以......
MethodInfo method = p.PropertyType.GetMethod("SameValueAs");
//problem solved
var propValue = p.GetValue(this);
var res = method.Invoke(propValue, new object[] { other.LastName });
答案 1 :(得分:0)
使用PropertyInfo获取您需要的任何属性的值。
答案 2 :(得分:0)
只需从属性中获取值,并像平常一样使用它。
foreach (var p in type.GetProperties())
{
if (p.GetCustomAttributes(typeof(ChangeRequestFieldAttribute), false).Count() > 0)
{
//just get the value of the property & cast it.
var propertyValue = p.GetValue(<the instance>, null);
if (propertyValue !=null && propertyValue is ContactStringProperty)
{
var contactString = (ContactStringProperty)property;
contactString.SameValueAs(...);
}
}
}