【问题标题】:Unable to assign resultset to Tuple in c#无法在 c# 中将结果集分配给元组
【发布时间】:2019-04-10 14:42:24
【问题描述】:

我在 C# 中创建了一个返回元组的方法。我无法将结果分配给元组。

我创建了一个名为 Tuple benchMarkReturns 的元组; 如何赋值。目前当我做一个benchMarkReturns。 ,我的意思是点,我得到的 Item1 和 Item2 属性是只读的。

如果有人觉得有更好的方法,欢迎提出建议

需要在以下foreach循环中为字段Bmrk1和Bmrk2调用方法。

我需要将 CompoundReturnsBenchMark1 和 CompoundReturnsBenchMark2 分配给元组

foreach (var p in performance)
                {
                    var model = new TrackRecordVM
                    {
                        Year = p.Key,
                        Jan = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 1) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 1).MTD : null),
                        Feb = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 2) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 2).MTD : null),
                        Mar = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 3) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 3).MTD : null),
                        Apr = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 4) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 4).MTD : null),
                        May = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 5) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 5).MTD : null),
                        Jun = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 6) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 6).MTD : null),
                        Jul = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 7) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 7).MTD : null),
                        Aug = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 8) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 8).MTD : null),
                        Sep = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 9) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 9).MTD : null),
                        Oct = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 10) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 10).MTD : null),
                        Nov = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 11) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 11).MTD : null),
                        Dec = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 12) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 12).MTD : null),
                        YTD = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 12) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 12).YTD : null),
                        Bmrk1 =  ,
                        Bmrk1Name = "Test1",
                        Bmrk2 =  ,
                        Bmrk2Name = "Test2"
                        //Bmrk = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 12) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 12).BENCHMK1_MTD : null),
                        //BmrkName = p.FirstOrDefault(x => x.VALUEDATE.Month == 12) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 12).BENCHMK1_INDEX_NAME : null
                    }; 

返回元组值的方法

private Tuple<double, double> GetBenchMarkByYear(int year, int benchMark1, int benchMark2)
        {
            Tuple<double, double> benchMarkReturns;
            var benchMark1Returns = GetViewService<MV_INDEX_PERFORMANCE>().Where(x => x.Mtd != null && x.IndexId == benchMark1 && x.PriceDate.Year == year).Select(x => x.Mtd).ToArray();
            var benchMark2Returns = GetViewService<MV_INDEX_PERFORMANCE>().Where(x => x.IndexId == benchMark2 && x.PriceDate.Year == year).Select(x => x.Mtd).ToArray();
            double[] temp1 = benchMark1Returns.Cast<double>().ToArray();
            double[] temp2 = benchMark2Returns.Cast<double>().ToArray();
            var compoundReturnsBenchMark1 = CompoundReturns(temp1);
            var compoundReturnsBenchMark2 = CompoundReturns(temp2);


            return benchMarkReturns;
        }

【问题讨论】:

  • 你似乎没有初始化你的返回变量(记住元组是一个对象)
  • 元组在设计上是只读的。 stackoverflow.com/questions/3131400/…。如果您需要一些可变的东西,您可以使用不同的类。或者创建一个Tuple 的新实例。
  • benchMarkReturns = new Tuple&lt;double, double&gt;(compoundReturnsBenchMark1, compoundReturnsBenchMark2);

标签: c#


【解决方案1】:

return benchMarkReturns; benchMarkReturns 永远不会被分配。

benchMarkReturns = new Tuple&lt;double, double&gt;(compoundReturnsBenchMark1, compoundReturnsBenchMark2);

会解决你的问题

【讨论】:

    【解决方案2】:

    您的代码中的问题是您声明了一个变量Tuple&lt;double, double&gt; benchMarkReturns,但您从未为其赋值。

    所以,这应该是你的方法:

    private Tuple<double, double> GetBenchMarkByYear(int year, int benchMark1, int benchMark2)
            {
                var benchMark1Returns = GetViewService<MV_INDEX_PERFORMANCE>().Where(x => x.Mtd != null && x.IndexId == benchMark1 && x.PriceDate.Year == year).Select(x => x.Mtd).ToArray();
                var benchMark2Returns = GetViewService<MV_INDEX_PERFORMANCE>().Where(x => x.IndexId == benchMark2 && x.PriceDate.Year == year).Select(x => x.Mtd).ToArray();
                double[] temp1 = benchMark1Returns.Cast<double>().ToArray();
                double[] temp2 = benchMark2Returns.Cast<double>().ToArray();
                var compoundReturnsBenchMark1 = CompoundReturns(temp1);
                var compoundReturnsBenchMark2 = CompoundReturns(temp2);
    
                Tuple<double, double> benchMarkReturns = new Tuple<double, double>(compoundReturnsBenchMark1 , compoundReturnsBenchMark2);
    
                return benchMarkReturns;
            }
    

    【讨论】:

      猜你喜欢
      • 2015-02-17
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 2017-07-06
      • 2014-06-04
      相关资源
      最近更新 更多