我有一个使用一些 FieldInfo 对象的方法:
public static T SetFieldValue<T>(this T src, string propName, object value)
{
Type type = typeof(T);
FieldInfo propInfo = type.GetField(propName,
BindingFlags.Instance | BindingFlags.NonPublic);
Type propType = propInfo.FieldType;
var targetType = IsNullableType(propType)
? Nullable.GetUnderlyingType(propType) : propType;
value = Convert.ChangeType(value, targetType);
propInfo.SetValue(src, value);
return src;
}
现在我需要某种方法从该函数返回的特定 FieldInfo 获取 PropertyInfo 对象,主要是因为我特别需要 PropertyInfo.Name 字符串,对此有什么想法吗?
编辑:这是一些更具体的代码,我使用这种方法来获取两个对象之间的区别:
public static List<Variance> DetailedCompare<T>(this T val1, T val2)
{
List<Variance> variances = new List<Variance>();
FieldInfo[] fi = typeof(T).GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
foreach (FieldInfo f in fi) {
Variance v = new Variance();
v.Prop = f.Name;
v.valA = f.GetValue(val1);
v.valB = f.GetValue(val2);
if (v.valA != null) {
if (!v.valA.Equals(v.valB))
variances.Add(v);
} else if (v.valB != null) {
variances.Add(v);
}
}
return variances;
}
然后我使用返回的字段来格式化一个 SQL 查询,我将把它发送到一个网络服务,更具体地说。但是 FieldInfo.Name 对象通常类似于 k__BackingField 或 k__BackingField 我需要 PropertyInfo.Name,这是正确的名称。有什么方法可以从 FieldInfo 对象创建 PropertyInfo 对象吗?