【发布时间】:2015-12-04 23:56:13
【问题描述】:
是否可以在运行时修改属性的属性?
假设我有一些课程:
public class TheClass
{
[TheAttribute]
public int TheProperty { get; set; }
}
有没有办法做到这一点?
if (someCondition)
{
// disable attribute. Is this possible and how can this be done?
}
【问题讨论】:
-
为什么?也许最好在该属性上设置一个值,这样它就不会做你想做的事。或者这是为了序列化?
-
对,那你想做什么?阻止给定字段被序列化?还是在某些基础上对其进行序列化?如果是其中任何一个,您始终可以有两个字段,一个带有“[NonSerialized]”的字段不会被保存,当您决定应该保存时,您可以设置“另一个”字段。但我们需要更多信息来了解您对此的确切理由。
-
好的,如果用户想要TheProperty 被序列化或者不被序列化,用户可以勾选一个复选框。所以,根据用户的输入,属性必须改变。
-
嗯。好吧,我很想看看 Marc 的建议;取而代之的是,序列化是如何完成的?它是自定义xml吗?还是你只是依赖二进制序列化系统?
-
这样的话,我建议你可以把自己的属性放在上面,然后修改一个值(doSerialise=true);我不确定这是否可能,但几乎可以肯定应该是,通过反射。不过,我很想知道 Marc Gravell 是否有更好的主意。
标签: c# attributes