【发布时间】: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<double, double>(compoundReturnsBenchMark1, compoundReturnsBenchMark2);
标签: c#