OxyPlot指定位置轴不存在则新建存在则修改的优化实现方法
OxyPlot 轴属性更新优化方案
你的原始实现逻辑是通顺的,主要可以从减少集合遍历次数、复用通用逻辑两个方向做优化:
基础优化版(仅单次遍历)
去掉Any()判断,直接用FirstOrDefault()取值,只对Axes集合做一次查询,性能优于两次遍历的写法:
var xAxis = opGraph.Axes.FirstOrDefault(s => s.Position == AxisPosition.Bottom); if (xAxis != null) { xAxis.AbsoluteMaximum = absoluteMaximum; } else { opGraph.Axes.Add(new OxyPlot.Wpf.LinearAxis { Position = AxisPosition.Bottom, AbsoluteMaximum = absoluteMaximum, }); }
C# 8+ 简化写法
用模式匹配替代null判断,语法更简洁:
if (opGraph.Axes.FirstOrDefault(s => s.Position == AxisPosition.Bottom) is { } existingXAxis) { existingXAxis.AbsoluteMaximum = absoluteMaximum; } else { opGraph.Axes.Add(new OxyPlot.Wpf.LinearAxis { Position = AxisPosition.Bottom, AbsoluteMaximum = absoluteMaximum }); }
最高复用性方案(扩展方法封装)
如果需要频繁调整不同位置轴的最大值,可以把逻辑封装成扩展方法,全局复用:
public static class OxyPlotAxisExtensions { public static void UpdateAxisAbsoluteMaximum(this PlotModel plot, AxisPosition position, double absoluteMaximum) { // 匹配已有轴 if (plot.Axes.FirstOrDefault(axis => axis.Position == position) is { } existAxis) { existAxis.AbsoluteMaximum = absoluteMaximum; return; } // 不存在则新建轴,默认用线性轴,可根据业务需求替换为CategoryAxis等其他轴类型 plot.Axes.Add(new OxyPlot.Wpf.LinearAxis { Position = position, AbsoluteMaximum = absoluteMaximum }); } }
封装后调用只需要一行代码,也支持Y轴等其他位置的轴调整:opGraph.UpdateAxisAbsoluteMaximum(AxisPosition.Bottom, absoluteMaximum);
内容的提问来源于stack exchange,提问作者SideSky
相关产品推荐
相关产品推荐

