Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用c#泛型对代码进行微调_C# - Fatal编程技术网

应用c#泛型对代码进行微调

应用c#泛型对代码进行微调,c#,C#,我已经编写了一个代码来生成的图表数据,需要知道是否有任何可能的改进。我已经应用了泛型,但认为它可以进一步微调。有人能推荐什么吗 我基本上编写了一个GenerateExplotChartSeries方法,该方法将按照名称生成BoxPlotChartSeries 有两个同名的方法接受不同的参数。有两个不同的方法是一个好主意,还是最好有一个通用方法,对参数应用泛型,然后根据参数进行检查,并在方法中执行if-else条件?我唯一担心的是这种方法的长度会继续增加。还要注意,我将创建更多的图形,如折线图和样

我已经编写了一个代码来生成的图表数据,需要知道是否有任何可能的改进。我已经应用了泛型,但认为它可以进一步微调。有人能推荐什么吗

我基本上编写了一个GenerateExplotChartSeries方法,该方法将按照名称生成BoxPlotChartSeries

有两个同名的方法接受不同的参数。有两个不同的方法是一个好主意,还是最好有一个通用方法,对参数应用泛型,然后根据参数进行检查,并在方法中执行if-else条件?我唯一担心的是这种方法的长度会继续增加。还要注意,我将创建更多的图形,如折线图和样条曲线图。类和方法也需要考虑到这一点。因此,该方法还需要相应地生成样条曲线图数据和折线图数据

请注意以下几点 1.NpvGraphs将包含CommIns、CaptiveIns、SelfIns,EVAGraphs将包含CaptiveView和ParentView

  • 我已经为BloxPlot图表定义了BloxPlotSeries数据。类似地,我需要为样条曲线图和折线图定义额外的类。假设它们具有不同的属性,同时在回答中建议更好的编码标准
  • 我将很快合并其他图表除了箱线图。我该怎么处理

     public class Series<T>
        {
            public List<T> data { get; set; }
        }
    
     public class BloxPlotSeriesData
        {
            [JsonMinify]
            public double low { get; set; }
    
            [JsonMinify]
            public double q1 { get; set; }
    
            [JsonMinify]
            public double median { get; set; }
    
            [JsonMinify]
            public double q3 { get; set; }
    
            [JsonMinify]
            public double high { get; set; }
    
            [JsonMinify]
            public string Color { get; set; }
        }
    
      public class NPVGraphData
        {
            [JsonMinify]
            public List<double> CommIns { get; set; }
            [JsonMinify]
            public List<double> CaptiveIns { get; set; }
            [JsonMinify]
            public List<double> SelfIns { get; set; }
        }
    
     public class EVAGraphData
        {
            [JsonMinify]
            public List<double> CaptiveView { get; set; }
            [JsonMinify]
            public List<double> ParentView { get; set; }
        }
    
    类似地,我还要对该方法进行两次调用,该方法将相应地生成样条曲线图和折线图。上述方法调用仅适用于BoxPlotChart

    StressResult = new Models.StressTestAnalysis()
    {
    SeriesData=GenerateSplineChartSeries(trigger2Output.StressTestAnalysis.GraphData)
    }
    
        EndingSurplus = new EndingSurplus()
        {
          SeriesData=GenerateLineChartSeries(trigger2Output.EndingSurplus.GraphData)
        } 
    
    方法

      private Series<BloxPlotSeriesData> GenerateBoxPlotChartSeries(EVAGraphData evaResultsGraphData)
            {
    
                //CaptiveView
                var captiveViewSeriesData = new BloxPlotSeriesData
                {
                    low = evaResultsGraphData.CaptiveView[0],
                    q1 = evaResultsGraphData.CaptiveView[1],
                    median = evaResultsGraphData.CaptiveView[2],
                    q3 = evaResultsGraphData.CaptiveView[3],
                    high = evaResultsGraphData.CaptiveView[4],
                    Color = "#C111A0"
    
                };
    
                //ParentView
                var parentViewSeriesData = new BloxPlotSeriesData
                {
                    low = evaResultsGraphData.ParentView[0],
                    q1 = evaResultsGraphData.ParentView[1],
                    median = evaResultsGraphData.ParentView[2],
                    q3 = evaResultsGraphData.ParentView[3],
                    high = evaResultsGraphData.ParentView[4],
                    Color = "#FFB81C"
    
                };
                return new Series<BloxPlotSeriesData>
                {
                    data = new List<BloxPlotSeriesData> { captiveViewSeriesData, parentViewSeriesData }
                };
            }
    
            private Series<BloxPlotSeriesData> GenerateBoxPlotChartSeries(NPVGraphData npvResultsGraphData)
            {
                //CaptiveIns
                var captiveInsSeriesData = new BloxPlotSeriesData
                {
                    low = npvResultsGraphData.CaptiveIns[0],
                    q1 = npvResultsGraphData.CaptiveIns[1],
                    median = npvResultsGraphData.CaptiveIns[2],
                    q3 = npvResultsGraphData.CaptiveIns[3],
                    high = npvResultsGraphData.CaptiveIns[4],
                    Color = "#C111A0"
                };
    
                //CommIns
                var commInsSeriesData = new BloxPlotSeriesData
                {
                    low = npvResultsGraphData.CommIns[0],
                    q1 = npvResultsGraphData.CommIns[1],
                    median = npvResultsGraphData.CommIns[2],
                    q3 = npvResultsGraphData.CommIns[3],
                    high = npvResultsGraphData.CommIns[4],
                    Color = "#FFB81C"
                };
                //SelfIns
                var selfInsSeriesData = new BloxPlotSeriesData
                {
                    low = npvResultsGraphData.SelfIns[0],
                    q1 = npvResultsGraphData.SelfIns[1],
                    median = npvResultsGraphData.SelfIns[2],
                    q3 = npvResultsGraphData.SelfIns[3],
                    high = npvResultsGraphData.SelfIns[4],
                    Color = "#5D63D3"
                };
                return new Series<BloxPlotSeriesData>
                {
                    data = new List<BloxPlotSeriesData>{ captiveInsSeriesData, commInsSeriesData, selfInsSeriesData }
                };
    
            }
    
    专用系列生成器ExplotChartSeries(EVAGraphData evaResultsGraphData)
    {
    //CaptiveView
    var captiveViewSeriesData=新的BloxPlotSeriesData
    {
    low=evaResultsGraphData.CaptiveView[0],
    q1=evaResultsGraphData.CaptiveView[1],
    中位数=evaResultsGraphData.CaptiveView[2],
    q3=evaResultsGraphData.CaptiveView[3],
    高=evaResultsGraphData.CaptiveView[4],
    Color=“#C111A0”
    };
    //父视图
    var parentViewSeriesData=新的BloxPlotSeriesData
    {
    low=evaResultsGraphData.ParentView[0],
    q1=evaResultsGraphData.ParentView[1],
    中位数=evaResultsGraphData.ParentView[2],
    q3=evaResultsGraphData.ParentView[3],
    高=evaResultsGraphData.ParentView[4],
    Color=“#FFB81C”
    };
    返回新系列
    {
    数据=新列表{captiveViewSeriesData,parentViewSeriesData}
    };
    }
    专用系列生成器ExplotChartSeries(NPVGraphData npvResultsGraphData)
    {
    //俘虏
    var captiveInsSeriesData=新的BloxPlotSeriesData
    {
    低=npvResultsGraphData.CaptiveIns[0],
    q1=npvResultsGraphData.CaptiveIns[1],
    中位数=npvResultsGraphData.CaptiveIns[2],
    q3=npvResultsGraphData.CaptiveIns[3],
    高=npvResultsGraphData.CaptiveIns[4],
    Color=“#C111A0”
    };
    //康明斯
    var commInsSeriesData=新的BloxPlotSeriesData
    {
    低=npvResultsGraphData.CommIns[0],
    q1=npvResultsGraphData.CommIns[1],
    中位数=npvResultsGraphData.CommIns[2],
    q3=npvResultsGraphData.CommIns[3],
    高=npvResultsGraphData.CommIns[4],
    Color=“#FFB81C”
    };
    //塞尔芬斯
    var selfInsSeriesData=新的BloxPlotSeriesData
    {
    低=npvResultsGraphData.SelfIns[0],
    q1=npvResultsGraphData.SelfIns[1],
    中位数=npvResultsGraphData.SelfIns[2],
    q3=npvResultsGraphData.SelfIns[3],
    高=npvResultsGraphData.SelfIns[4],
    Color=“#5D63D3”
    };
    返回新系列
    {
    数据=新列表{CaptiveInSeriesData、ComminSeriesData、SelfInSeriesData}
    };
    }
    
    我不知道您是否真的需要泛型,因为您的工作似乎相当专业,而且不是非常“泛型”:您需要从共享特定结构的类中提取绘图数据。 也许一个简单的类层次结构就可以了? 我所做的只是:

    • 重命名公共属性并在抽象类中“向上拉”,抽象类具有操作公共数据的方法(即共享属性CaptiveView和ParentView
    • 如果子类支持虚拟方法,则创建一个虚拟方法以提供更多数据,就像SelfIns一样
    • 更改公共属性的大小写,因为它们应该是大写的,除非您的团队遵循不同的指导原则
    • 将特定值隔离到私有常量中,以便更好地了解在类中要使用的内容(以及其他原因)
    • 使GenerateExplotChartSeries成为一种“鸟瞰”方法,即一种在没有实现细节的情况下让您快速了解情况的方法
    • 创建两个私有(较小)方法,GetCaptivePlotData和GetParentData,它们保存实现细节。
      • 编辑:将所有方法放在抽象类中,这样它们将更易于阅读,参数更少,并且在OOP方面更有意义
    如果您有问题或建议,请告诉我

    public class Series<T>
    {
        public List<T> Data { get; set; }
    }
    
    public class BloxPlotSeriesData
    {
        [JsonMinify]
        public double Low { get; set; }
    
        [JsonMinify]
        public double Q1 { get; set; }
    
        [JsonMinify]
        public double Median { get; set; }
    
        [JsonMinify]
        public double Q3 { get; set; }
    
        [JsonMinify]
        public double High { get; set; }
    
        [JsonMinify]
        public string Color { get; set; }
    }
    
    /// <summary>
    /// The base class, holding common drawing data.
    /// </summary>
    public abstract class GraphData
    {
        private const string CaptivePlotColor = "#C111A0";
        private const string ParentPlotColor = "#FFB81C";
    
        [JsonMinify]
        public List<double> CaptiveView { get; set; }
        [JsonMinify]
        public List<double> ParentView { get; set; }
    
        /// <summary>
        /// Override this method in subclasses if you needto provide additional data.
        /// </summary>
        /// <returns>More data to be plotted.</returns>
        public virtual BloxPlotSeriesData ReturnMoreData()
        { return null; }
    
        /// <summary>
        /// Returns plot data.
        /// </summary>
        /// <returns>Plot data.</returns>
        public Series<BloxPlotSeriesData> GenerateBoxPlotChartSeries()
        {
            BloxPlotSeriesData captiveViewSeriesData = GetCaptivePlotData();
            BloxPlotSeriesData parentViewSeriesData = GetParentData();
    
            var Result = new Series<BloxPlotSeriesData>
            {
                Data = new List<BloxPlotSeriesData> { captiveViewSeriesData, parentViewSeriesData }
            };
    
            return AddMoreData(Result);
        }
    
        /// <summary>
        /// Adds more data if the first argument can provide it.
        /// </summary>
        /// <param name="Result"></param>
        /// <returns></returns>
        private Series<BloxPlotSeriesData> AddMoreData(Series<BloxPlotSeriesData> Result)
        {
            var MoreData = ReturnMoreData();
            if (MoreData != null)
            {
                Result.Data.Add(MoreData);
            }
            return Result;
        }
    
        private BloxPlotSeriesData GetParentData()
        {
            return new BloxPlotSeriesData
            {
                Low = ParentView[0],
                Q1 = ParentView[1],
                Median = ParentView[2],
                Q3 = ParentView[3],
                High = ParentView[4],
                Color = ParentPlotColor
            };
        }
    
        private BloxPlotSeriesData GetCaptivePlotData()
        {
            return new BloxPlotSeriesData
            {
                Low = CaptiveView[0],
                Q1 = CaptiveView[1],
                Median = CaptiveView[2],
                Q3 = CaptiveView[3],
                High = CaptiveView[4],
                Color = CaptivePlotColor
            };
        }
    }
    
    public class EVAGraphData : GraphData
    {
    }
    
    public class NPVGraphData : GraphData
    {
        [JsonMinify]
        public List<double> SelfIns { get; set; }
    
        public override BloxPlotSeriesData ReturnMoreData()
        {
            return new BloxPlotSeriesData
            {
                Low = SelfIns[0],
                Q1 = SelfIns[1],
                Median = SelfIns[2],
                Q3 = SelfIns[3],
                High = SelfIns[4],
                Color = "#5D63D3"
            };
        }
    }
    
    公共类系列
    {
    公共列表数据{get;set;}
    }
    公共类BloxPlotSeriesData
    {
    [JsonMinify]
    公共双低位{get;set;}
    [JsonMinify]
    公共双Q1{get;set;}
    [JsonMinify]
    公共双中位数{get;set;}
    [JsonMinify]
    公共双Q3{get;set;}
    [JsonMinify]
    公共双高{get;set;
    
    public class Series<T>
    {
        public List<T> Data { get; set; }
    }
    
    public class BloxPlotSeriesData
    {
        [JsonMinify]
        public double Low { get; set; }
    
        [JsonMinify]
        public double Q1 { get; set; }
    
        [JsonMinify]
        public double Median { get; set; }
    
        [JsonMinify]
        public double Q3 { get; set; }
    
        [JsonMinify]
        public double High { get; set; }
    
        [JsonMinify]
        public string Color { get; set; }
    }
    
    /// <summary>
    /// The base class, holding common drawing data.
    /// </summary>
    public abstract class GraphData
    {
        private const string CaptivePlotColor = "#C111A0";
        private const string ParentPlotColor = "#FFB81C";
    
        [JsonMinify]
        public List<double> CaptiveView { get; set; }
        [JsonMinify]
        public List<double> ParentView { get; set; }
    
        /// <summary>
        /// Override this method in subclasses if you needto provide additional data.
        /// </summary>
        /// <returns>More data to be plotted.</returns>
        public virtual BloxPlotSeriesData ReturnMoreData()
        { return null; }
    
        /// <summary>
        /// Returns plot data.
        /// </summary>
        /// <returns>Plot data.</returns>
        public Series<BloxPlotSeriesData> GenerateBoxPlotChartSeries()
        {
            BloxPlotSeriesData captiveViewSeriesData = GetCaptivePlotData();
            BloxPlotSeriesData parentViewSeriesData = GetParentData();
    
            var Result = new Series<BloxPlotSeriesData>
            {
                Data = new List<BloxPlotSeriesData> { captiveViewSeriesData, parentViewSeriesData }
            };
    
            return AddMoreData(Result);
        }
    
        /// <summary>
        /// Adds more data if the first argument can provide it.
        /// </summary>
        /// <param name="Result"></param>
        /// <returns></returns>
        private Series<BloxPlotSeriesData> AddMoreData(Series<BloxPlotSeriesData> Result)
        {
            var MoreData = ReturnMoreData();
            if (MoreData != null)
            {
                Result.Data.Add(MoreData);
            }
            return Result;
        }
    
        private BloxPlotSeriesData GetParentData()
        {
            return new BloxPlotSeriesData
            {
                Low = ParentView[0],
                Q1 = ParentView[1],
                Median = ParentView[2],
                Q3 = ParentView[3],
                High = ParentView[4],
                Color = ParentPlotColor
            };
        }
    
        private BloxPlotSeriesData GetCaptivePlotData()
        {
            return new BloxPlotSeriesData
            {
                Low = CaptiveView[0],
                Q1 = CaptiveView[1],
                Median = CaptiveView[2],
                Q3 = CaptiveView[3],
                High = CaptiveView[4],
                Color = CaptivePlotColor
            };
        }
    }
    
    public class EVAGraphData : GraphData
    {
    }
    
    public class NPVGraphData : GraphData
    {
        [JsonMinify]
        public List<double> SelfIns { get; set; }
    
        public override BloxPlotSeriesData ReturnMoreData()
        {
            return new BloxPlotSeriesData
            {
                Low = SelfIns[0],
                Q1 = SelfIns[1],
                Median = SelfIns[2],
                Q3 = SelfIns[3],
                High = SelfIns[4],
                Color = "#5D63D3"
            };
        }
    }