属性 - 比较
目前,我在根类中有一个声明,它使用 DefaultValueAttribute 描述符迭代派生类的属性并实例化属性的默认值。我想要做的是将其从简单的 DefaultValue 扩展为 XmlElement、XmlAttribute 以及 Xml 命名空间的序列化中包含的一系列属性。
我在扩展当前设计以处理多个属性而不加载大量 if/then/else 语句来处理各种定义的属性时遇到问题。
当前设计:
private void Initialize () {
foreach( PropertyDescriptor property in TypeDescriptor.GetProperties( this ) ) {
XmlElementAttribute xel = ( XmlElementAttribute ) property.Attributes[typeof( XmlElementAttribute )];
if( xel != null ) {
this.AddElement( xel.ElementName , "" );
}
DefaultValueAttribute attr = ( DefaultValueAttribute ) property.Attributes[typeof( DefaultValueAttribute )];
if( attr != null ) {
property.SetValue( this , attr.Value );
}
}
}
建议设计:
private void Initialize () {
foreach( PropertyDescriptor property in TypeDescriptor.GetProperties( this ) ) {
foreach( Attribute attr in property.Attributes ) {
if( attr = typeof(XmlElementAttribute)){
//do something
}else if(attr = typeof(DefaultValueAttribute)){
//do something
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以定义一个
Dictionary>
(或将object
替换为您的类的特定类型),并添加您想要为每个执行的代码type:现在你可以测试你的字典是否包含该类型并执行委托:
You could define a
Dictionary<Type, Action<object>>
(or replaceobject
with the specific type of your class) and add the code you want to execute for each type:Now you can just test whether your dictionary contains the type and execute the delegate: