You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

.NET Framework 4.8下使用ScottPlot 5.0,MaximumBoundary类参数必填但无定义的问题求助

.NET Framework 4.8下使用ScottPlot 5.0,MaximumBoundary类参数必填但无定义的问题求助

我现在遇到一个很矛盾的问题:当我尝试实例化ScottPlot.AxisRules.MaximumBoundary类的变量时,编译器提示我缺少必填参数"xAxis";可当我尝试在初始化器里定义"xAxis"时,又被告知这个类里根本没有"xAxis"的定义。

我看到的两个提示弹窗内容分别是:

  • 提示缺少对应必填参数的消息
  • 提示“类型不包含标识符定义”的消息

这是我尝试实例化变量的代码:

var rule = new ScottPlot.AxisRules.MaximumBoundary
{
    xAxis = thisPlot.Axes.Left,
    yAxis = thisPlot.Axes.Bottom,
    Limits = new AxisLimits(thisPlot.Axes.GetDataLimits().Left * 0.05, thisPlot.Axes.GetDataLimits().Right * 0.05, 0, 100)
};

这段代码触发了两个警告:

  • There is no argument given that corresponds to the required parameter
  • 'type' does not contain a definition for 'identifier'

下面是MaximumBoundary类的完整定义:

namespace ScottPlot.AxisRules;

public class MaximumBoundary(IXAxis xAxis, IYAxis yAxis, AxisLimits limits) : IAxisRule
{
    readonly IXAxis XAxis = xAxis;
    readonly IYAxis YAxis = yAxis;
    public AxisLimits Limits { get; set; } = limits;

    public void Apply(RenderPack rp, bool beforeLayout)
    {
        double horizontalSpan = Math.Min(Math.Abs(XAxis.Range.Span), Limits.XRange.Span);
        double verticalSpan = Math.Min(Math.Abs(YAxis.Range.Span), Limits.YRange.Span);

        if (XAxis.IsInverted())
        {
            if (XAxis.Range.Min > Limits.XRange.Max)
            {
                XAxis.Range.Min = Limits.XRange.Max;
                XAxis.Range.Max = Limits.XRange.Max - horizontalSpan;
            }

            if (XAxis.Range.Max < Limits.XRange.Min)
            {
                XAxis.Range.Max = Limits.XRange.Min;
                XAxis.Range.Min = Limits.XRange.Min + horizontalSpan;
            }
        }
        else
        {
            if (XAxis.Range.Max > Limits.XRange.Max)
            {
                XAxis.Range.Max = Limits.XRange.Max;
                XAxis.Range.Min = Limits.XRange.Max - horizontalSpan;
            }

            if (XAxis.Range.Min < Limits.XRange.Min)
            {
                XAxis.Range.Min = Limits.XRange.Min;
                XAxis.Range.Max = Limits.XRange.Min + horizontalSpan;
            }
        }

        if (YAxis.IsInverted())
        {
            if (YAxis.Range.Min > Limits.YRange.Max)
            {
                YAxis.Range.Min = Limits.YRange.Max;
                YAxis.Range.Max = Limits.YRange.Max - verticalSpan;
            }

            if (YAxis.Range.Max < Limits.YRange.Min)
            {
                YAxis.Range.Max = Limits.YRange.Min;
                YAxis.Range.Min = Limits.YRange.Min + verticalSpan;
            }
        }
        else
        {
            if (YAxis.Range.Max > Limits.YRange.Max)
            {
                YAxis.Range.Max = Limits.YRange.Max;
                YAxis.Range.Min = Limits.YRange.Max - verticalSpan;
            }

            if (YAxis.Range.Min < Limits.YRange.Min)
            {
                YAxis.Range.Min = Limits.YRange.Min;
                YAxis.Range.Max = Limits.YRange.Min + verticalSpan;
            }
        }
    }
}

另外我发现一个线索:当我自己创建一个包含readonly成员的类时,编译器提示我“Feature 'readonly members' is not available in C# 7.3. Please use language version 8.0 or greater”。我怀疑是不是因为我的C#版本不够,导致识别不了这个类里的readonly属性?

我不想修改目标框架版本,也不想降级ScottPlot,请问有没有办法能解决这个问题?

我的运行环境是:.NET Framework 4.8 + ScottPlot 5.0

备注:内容来源于stack exchange,提问作者curtiss

火山引擎 最新活动