【发布时间】:2017-09-12 00:16:32
【问题描述】:
我正在尝试找出是否有办法为下面的示例代码创建循环
// the objects below create a list of decimals
var ema12 = calc.ListCalculationData.Select(i => (double)i.Ema12);
var ema26 = calc.ListCalculationData.Select(i => (double)i.Ema26);
var ema = calc.ListCalculationData.Select(i => (double)i.Ema);
var adl = calc.ListCalculationData.Select(i => (double)i.ADL);
var r1 = GoodnessOfFit.RSquared(ema12);
var r2 = GoodnessOfFit.RSquared(ema26);
var r3 = GoodnessOfFit.RSquared(ema);
var r4 = GoodnessOfFit.RSquared(adl);
我正在尝试获得类似于以下伪代码的内容。请记住,每个 var 项都是小数列表
foreach (var item in calc.ListCalculationData.AsEnumerable())
{
var item2 = calc.ListCalculationData.Select(i => (double)item);
var r1 = GoodnessOfFit.RSquared(item2);
}
更多信息:
ListCalculationData 是我在下面添加的自定义类的列表。我想要做的是循环遍历该类中的每个变量并执行选择查询以对选择查询返回的小数列表执行拟合优度 rsquared 计算,因此它简化了我的代码并使其类似于我的伪代码
public class CalculationData
{
public decimal Ema { get; set; }
public decimal Ema12 { get; set; }
public decimal Ema26 { get; set; }
public decimal ADL { get; set; }
}
更新:我为本地函数尝试了这个,但它失败了 ;预期的和无效的{
double r(Func<CalculationData, double> f) =>
{ GoodnessOfFit.RSquared(calc.ListCalculationData.Select(f), vectorArray) };
更新 2:由于建议,这是我当前代码设置的内容,但显然这不起作用,因为它表示名称 i 在此部分的上下文中不存在:nameof(i.Ema12 ) 也因为我使用的主要是伪代码
MultipleRegressionInfo rn(Func<CalculationData, double> f, string name, int days)
{
MultipleRegressionInfo mrInfo = new MultipleRegressionInfo
{
RSquaredValue = GoodnessOfFit.RSquared(calc.ListCalculationData.Select(f), vectorArray),
ListValues = (List<double>)calc.ListCalculationData.Select(f).ToList(),
ValueName = name,
Days = days
};
listMRInfo.Add(mrInfo);
return mrInfo;
};
MultipleRegressionInfo rnList(Func<CalculationData, List<decimal>> f, string name, int days)
{
MultipleRegressionInfo mrInfo = new MultipleRegressionInfo
{
RSquaredValue = GoodnessOfFit.RSquared(calc.ListCalculationData.Select(f), vectorArray),
ListValues = (List<double>)calc.ListCalculationData.Select(f).ToList(),
ValueName = name,
Days = days
};
listMRInfo.Add(mrInfo);
return mrInfo;
};
foreach (CalculationData calc in ListCalculationData)
{
foreach (object value in calc)
{
if (value == typeof(decimal))
{
MultipleRegressionInfo r1 = rn(i => (double)i.value, nameof(i.value), 100)
}
else if (value == typeof(List<decimal>)
{
MultipleRegressionInfo r1 = rnList(i => i.value, nameof(i.value), 100)
}
}
}
【问题讨论】:
-
没有更多上下文,您的问题太宽泛了。单个
Select()可以返回元组枚举而不是单个值。但是您仍然需要多次调用RSquared(),并使用Select()there 再次提取元组值。我不认为这有多大帮助。在您的循环示例中,您将采用另一种方式,但您需要反射或预填充的访问器委托数组来获取您尝试获取的属性/字段值。如果您能提供一个好的minimal reproducible example 并更好地解释您尝试过的内容以及您遇到的具体问题,将会有所帮助。 -
@PeterDuniho 我添加了更多信息,希望能为您澄清事情
-
问题变得越来越混乱。你能看看例如dotnetfiddle.net/Sb65DZ,看看它对你是否有意义?