如何调整Dump方法的属性输出顺序,让子类属性插入父类属性间?
如何调整Dump方法的属性输出顺序,让子类child2属性插在父类parent1和parent2之间?
默认情况下,Dump方法会按照类定义的顺序输出对象属性,存在继承关系时子类属性会显示在父类属性下方。现在需要修改输出顺序,让子类的child2属性显示在父类的parent1与parent2属性之间。
原代码
void Main() { extendedchild a = new extendedchild(); a.parent3 = DateTime.Now; a.Dump(); } /// <summary> /// This file holds all user defined indicator methods. /// </summary> public class parent { public double parent1 { get; set; } public double parent2 { get; set; } public DateTime parent3 { get; set; } } public class extendedchild: parent { public bool child1 { get; set; } public double child2 { get; set; } }
解决方法
默认Dump方法依赖类的继承结构和属性定义顺序输出,要自定义顺序,最直接可靠的方式是手动构造匿名类指定输出顺序,再对匿名类调用Dump:
修改后的Main方法
void Main() { extendedchild a = new extendedchild(); a.parent3 = DateTime.Now; // 按目标顺序构造匿名类 new { a.parent1, a.child2, a.parent2, a.parent3, a.child1 }.Dump(); }
这样输出时就会严格按照parent1 → child2 → parent2 → parent3 → child1的顺序展示属性。
通用化方案
如果需要在多处复用该输出格式,可以给子类添加自定义Dump方法封装逻辑:
public class extendedchild: parent { public bool child1 { get; set; } public double child2 { get; set; } public void CustomDump() { new { parent1, child2, parent2, parent3, child1 }.Dump(); } } // 调用方式 a.CustomDump();
如果使用的Dump工具支持特性排序(如部分序列化框架),也可以尝试通过[DisplayOrder]这类特性标记属性顺序,但对于LINQPad默认Dump来说,匿名类的方式兼容性最好、实现最简单。
内容的提问来源于stack exchange,提问作者junkone
相关产品推荐
相关产品推荐

