我有一个用属性... [DataEntity("MESSAGE_STAGING", EnableCaching = true, CacheTimeout = 43200)]
对于某些要求,我想在运行时将此值MESSAGE_STAGING
更改为Test_Message_Staging
。
实现这一目标的最佳方式是什么?
我可以使用反射,还是有其他方法可以做到这一点。
请提供代码示例。
由于 SNA
答案 0 :(得分:8)
我不相信使用反射设置属性是可能的 - 即使是这样,我也鼓励你不要这样做。
属性应该用于编译时已知的元数据。如果你想要一个更动态的元数据形式,从文件加载它或者使用app.config代替......或者至少有一些特殊的“占位符”值(比如连接字符串中的| DataDirectory |),它们可以在执行时解析时间。
答案 1 :(得分:5)
使用反射在运行时更改属性属性值是不可能的,因为属性是在程序集中序列化的元数据,更改它们意味着更改程序集。
答案 2 :(得分:1)
如果我理解正确,有一种可能的方法可以在运行时更改实例的属性值。结帐示例代码
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
}