C# 从对象取消绑定时访问反射类型的PropertyInfo

C# 从对象取消绑定时访问反射类型的PropertyInfo,c#,reflection,C#,Reflection,让我们假设我有一些从反射过程中创建的PropertyInfo对象 通常,我可以通过ReflectedType属性获取内部对象的类型。但如果它被装入对象中,我就无法访问它 var x = property.ReflectedType //Works as charm var y = ((object)property).ReflectedType // Wouldn't work 如何访问已装箱到对象的PropertyInfo的ReflectedType属性?如果您确定您的对象引用了Proper

让我们假设我有一些从反射过程中创建的PropertyInfo对象

通常,我可以通过ReflectedType属性获取内部对象的类型。但如果它被装入对象中,我就无法访问它

var x = property.ReflectedType //Works as charm
var y = ((object)property).ReflectedType // Wouldn't work

如何访问已装箱到对象的PropertyInfo的ReflectedType属性?

如果您确定您的
对象
引用了
PropertyInfo
,则返回到
PropertyInfo
,您可以访问该属性

var z = ((PropertyInfo)y).ReflectedType

编辑关于你在问题上的附加注释:如果你仍然可以访问你想要访问的属性变量,那么就使用它。。。我觉得您对这里的某些内容感到困惑,但您应该提供更多信息,因为除非您这样做,否则没有人可以帮助您。

如果您确定您的
对象
引用了
属性信息
,那么返回到
属性信息
,您就可以访问该属性

var z = ((PropertyInfo)y).ReflectedType

编辑关于你在问题上的附加注释:如果你仍然可以访问你想要访问的属性变量,那么就使用它。。。我觉得您对这里的某些内容感到困惑,但您应该提供更多信息,因为除非您这样做,否则没有人能帮助您。

阅读您对@fish答案的评论时,这可能是您想要做的:

private static void SetPropertyValue(object v, XElement item, PropertyInfo property)
{
  property.SetValue(v, Convert.ChangeType(item.Value, property.PropertyType));
}

这有帮助吗?

当阅读您对@fish答案的评论时,这可能是您想要做的:

private static void SetPropertyValue(object v, XElement item, PropertyInfo property)
{
  property.SetValue(v, Convert.ChangeType(item.Value, property.PropertyType));
}

这有帮助吗?

你真正想做的是什么?您还必须意识到,您不是在“拆箱”,而是在铸造。一个完全不同的过程:)有这样的smth。((对象)属性)需要知道属性。反射类型如果您找到了问题的答案,请发布。您真正想要实现的是什么?您还必须意识到,您不是在“拆箱”,而是在铸造。一个完全不同的过程:)有这样的smth。((对象)属性)需要知道property.reflectedType如果您找到了问题的答案,请发布它。
private static void SetPropertyValue(object v,XElement项,PropertyInfo属性){switch(property.PropertyType.Name){case“UInt64”:property.SetValue(v,Convert.ToUInt64(item.Value),null);break;大小写“UInt32”:property.SetValue(v,Convert.ToUInt32(item.Value),null);break;默认值:property.SetValue(v,item.Value,null);break;}
v是一种RuntimePropertyInfo@PaulKyrejto然后,您可以将此代码添加到您的问题中,并解释您实际想要执行的操作,而不是合成代码片段吗?是否要访问此
RuntimePropertyInfo
的属性?您只需要对其进行强制转换。
private static void SetPropertyValue(对象v,XElement项,PropertyInfo属性){switch(property.PropertyType.Name){case“UInt64”:property.SetValue(v,Convert.ToUInt64(item.Value),null);break;case“UInt32”:property.SetValue(v,Convert.ToUInt32)(item.Value,null);break;默认值:property.SetValue(v,item.Value,null);break;}
v是一种RuntimePropertyInfo@PaulKyrejto然后,您可以将此代码添加到您的问题中,并解释您实际想要执行的操作,而不是合成代码片段吗?是否要访问此
RuntimePropertyInfo
的属性?您只需对其进行强制转换即可。