.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




