You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:06:02