C# 如何使用反射设置属性值

C# 如何使用反射设置属性值,c#,.net,asp.net,C#,.net,Asp.net,我有一个用属性修饰的类…[DataEntity(“MESSAGE_STAGING”,EnableCaching=true,CacheTimeout=43200)] 对于某些需求,我希望在运行时将此值MESSAGE\u STAGING更改为Test\u MESSAGE\u STAGING 实现这一目标的最佳方式是什么 我可以使用反射,或者有其他方法来实现这一点 请提供代码示例 谢谢 SNA我不相信使用反射设置属性是可能的,即使是这样,我也鼓励您不要这样做 属性应该用于在编译时已知的元数据。如果您想

我有一个用属性修饰的类…
[DataEntity(“MESSAGE_STAGING”,EnableCaching=true,CacheTimeout=43200)]

对于某些需求,我希望在运行时将此值
MESSAGE\u STAGING
更改为
Test\u MESSAGE\u STAGING

实现这一目标的最佳方式是什么

我可以使用反射,或者有其他方法来实现这一点

请提供代码示例

谢谢
SNA

我不相信使用反射设置属性是可能的,即使是这样,我也鼓励您不要这样做


属性应该用于在编译时已知的元数据。如果您想要更动态的元数据形式,请从文件中加载它,或者改用app.config。。。或者至少有一些特殊的“占位符”值(如连接字符串中的| DataDirectory |)它可以在执行时解析。

不可能在运行时使用反射更改属性属性值,因为属性是在程序集中序列化的元数据,更改它们意味着更改程序集。

如果我理解正确,在反射中,有一种可能的方法可以在运行时更改实例的属性值。。签出示例代码

        AttributeCollection ac  = TypeDescriptor.GetAttributes(yourObj);

        foreach (var att in ac)
        {
            //DataEntityAttribute  -- ur attribute class name
            DataEntityAttribute da = att as DataEntityAttribute ;
            Console.WriteLine(da.field1);  //initially it shows MESSAGE_STAGING
            da.field1= "Test_Message_Staging";  
         }


         //Check the changed value
        AttributeCollection acc = TypeDescriptor.GetAttributes(yourObj);

        foreach (var att in ac)
        {
            DataEntityAttribute da = att as DataEntityAttribute ;
            Console.WriteLine(da.field1); //now it shows Test_Message_Staging
        }

要求我必须以某种方式更改表名。属性不允许从web.config获取值。参数应为常量。因此,我唯一能想到的就是从反射中获得类的属性(DATAONTION)并改变它的属性。但是,它可能是所有类型都可用的一般机制,因为它的基础是在根对象类的GETType方法中建立的。它为类型返回的信息是不可扩展的,因为在编译目标类型后无法对其进行修改。您试图解决的根本问题是什么?这不会持续到实例化的对象。