C# 3.0 如何重写以下内容?(C3.0)

C# 3.0 如何重写以下内容?(C3.0),c#-3.0,C# 3.0,我正试着写以下内容 double sum_res = 0.0; double yhat = 0; double res = 0; int n = 0; for(int i=0;i<x.Count;i++) { yhat = inter + (slp*x[i]); res = yhat - y[i]; n++; } 错误:无法从用法推断方法“System.Linq.Enumerable.SelectSystem.Collections

我正试着写以下内容

double sum_res = 0.0;
double yhat = 0;
double res = 0;
int n = 0;

for(int i=0;i<x.Count;i++)
{
    yhat = inter + (slp*x[i]);
    res  = yhat - y[i];
    n++;              
}
错误:无法从用法推断方法“System.Linq.Enumerable.SelectSystem.Collections.Generic.IEnumerable,System.Func”的类型参数。尝试显式指定类型参数

需要帮助

谢谢,使用聚合而不是选择,因为它更接近于模拟您真正想要做的事情

        double sum_res = Enumerable.Range(0, x.Count).Aggregate(0.0, (sum, i) =>
        {
            yhat = inter + (slp * x[i]);
            res = yhat - y[i];
            n++;
            return sum + res * res;
        });
使用聚合而不是选择,因为它更接近于模拟您真正想要做的事情

        double sum_res = Enumerable.Range(0, x.Count).Aggregate(0.0, (sum, i) =>
        {
            yhat = inter + (slp * x[i]);
            res = yhat - y[i];
            n++;
            return sum + res * res;
        });

你得到的错误很好LINQ不知道你将从lambda返回什么。Sam演示了编译器如何通过显式返回已知类型的内容来确定返回的内容

将来,请考虑编译器将如何识别您试图从表达式返回的内容。这可以为您提供一条线索,让您知道如何以编译器可以解决的方式构造表达式


如果您的表达式是明确的,则不需要显式声明返回,否则您需要帮助编译器,如Sam所示。

您得到的错误非常好,LINQ不知道您将从lambda返回什么。Sam演示了编译器如何通过显式返回已知类型的内容来确定返回的内容

将来,请考虑编译器将如何识别您试图从表达式返回的内容。这可以为您提供一条线索,让您知道如何以编译器可以解决的方式构造表达式


如果表达式是明确的,则不需要显式声明返回,否则需要帮助编译器,如Sam所示。

lambda主体没有返回语句,因此出现错误。Select方法将Func lambda作为参数,该参数是一个函数,它接受与集合相同类型的内容并返回其他内容。您必须有一个return语句才能工作。

lambda主体没有return语句,因此出现错误。Select方法将Func lambda作为参数,该参数是一个函数,它接受与集合相同类型的内容并返回其他内容。你必须有一个return语句才能使它工作。

我不知道你为什么要增加n,但这真的不应该。我喜欢这样的东西

double sum_res = Enumerable.Range(0, x.Count).Aggregate(0.0, (sum, i) => 
    sum + Math.Pow((inter + (slp * x[i])) - y[i]), 2.0))
);

我不知道你为什么要增加n,但那真的不应该。我喜欢这样的东西

double sum_res = Enumerable.Range(0, x.Count).Aggregate(0.0, (sum, i) => 
    sum + Math.Pow((inter + (slp * x[i])) - y[i]), 2.0))
);