Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在类实例的属性上查找属性_C#_Reflection - Fatal编程技术网

C# 在类实例的属性上查找属性

C# 在类实例的属性上查找属性,c#,reflection,C#,Reflection,给定一个类的实例,我想在运行时设置属性的属性 所以我尝试了这个方法,但据我所知,它会在类上找到属性而不是实例,所以我对属性属性所做的任何更改都没有效果 var properties = myObject.GetType().GetProperties(); foreach (object prop in properties) { var attribute =prop.GetCustomAttributes(typeof(MyAttribute), true)[0]; //att

给定一个类的实例,我想在运行时设置属性的属性

所以我尝试了这个方法,但据我所知,它会在类上找到属性而不是实例,所以我对属性属性所做的任何更改都没有效果

var properties = myObject.GetType().GetProperties();

foreach (object prop in properties)
{
   var attribute =prop.GetCustomAttributes(typeof(MyAttribute), true)[0];
   //attribute.MyProp do some stuff
}
如果我尝试使用下面这样的类型描述符,就无法访问属性上的属性

var myObject= (MyClass) object;
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(myObject);

//There is no props[0].GetCustomAttributes(

属性是应用于类型或类型成员的元数据,而不是应用于实例。如果将值应用到类的特定实例,不应该考虑使用属性/字段吗?

这不能工作。属性应该是不可变的。属性与代码元素相关联,而不是与该代码元素的运行时表示形式相关联。(顺便说一句,TypeDescriptor有一个GetAttributes方法,但它仍然基于类型,而不是实例)我试图回避这样一个事实,即属性只将编译时常量作为参数,因此我需要动态提供一些值。如果需要,您可以获取属性的实例,只要您使用该属性。您要问的问题是,如果您要尽一切努力获取一个属性的实例,以便将运行时值应用于该实例,那么作为一个属性又有什么用呢?