首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么.Average()方法不能工作?以及错误的CS1061解释?

为什么.Average()方法不能工作?以及错误的CS1061解释?
EN

Stack Overflow用户
提问于 2022-07-27 16:11:37
回答 1查看 165关注 0票数 -1

我试图解决codewars.com的挑战,题为“你到底有多好?”

挑战的描述:你班上有一次考试,你通过了。祝贺你!但你是个雄心勃勃的人。你想知道你是否比班里的普通学生好。您将收到一个包含同龄人考试成绩的数组。现在,计算平均和比较你的分数!如果你更好,还真,否则就错了!注意:您的点数不包括在类的点数数组中。为了计算平均值,您可以将点添加到给定的数组中!

我的解决方案:

代码语言:javascript
运行
复制
public class Kata
{
  public static bool BetterThanAverage(int[] ClassPoints, int YourPoints)
  {
    ClassPoints = ClassPoints.Append(YourPoints).ToArray(); // Add Yourpoints to the ClassPoints array
    int AveragePoints = ClassPoints.Average(); // Get average points
    if (YourPoints > AveragePoints) { // Compare
      return true;
    } else {
      return false;
    }
  }
}

我得到的错误:

src/Solution.cs(5,31):error CS1061:'int[]‘不包含'Append’的定义,并且无法找到接受'int[]‘类型的第一个参数的可访问扩展方法'Append’(您是缺少使用指令还是程序集引用?)

src/Solution.cs(6,37):error CS1061:'int[]‘不包含“Average”的定义,并且无法找到接受'int[]’类型的第一个参数的可访问扩展方法‘int[]’(您是缺少一个使用指令还是程序集引用?)

我试着研究错误代码,但我无法理解解释。我的代码有什么问题,这个挑战很简单,但是我不明白为什么简单的方法不能工作?

最新消息。找到解决方案:谢谢大家的解决方案。@MikeT提出的代码正在工作,并通过了测试,但它感觉像是背离了需求。

im解决方案是在codewars.org编辑器中完成的,而不是在Visual中。任务本身是预先定义的,我决定不改变这一点。但以下是我的新代码:

代码语言:javascript
运行
复制
public class Kata
{
  public static bool BetterThanAverage(int[] ClassPoints, int YourPoints)
  {    
    int SumClassPoints = 0;
    int Average = 0;
    for (int i=0; i < ClassPoints.Length; i++) {
      SumClassPoints += ClassPoints[i];    
    }
    Average = (SumClassPoints + YourPoints) / (ClassPoints.Length + 1);
    if (YourPoints > Average) {
      return true;
    } else {
      return false;
    }
  }
}
代码语言:javascript
运行
复制
EN

回答 1

Stack Overflow用户

发布于 2022-07-27 16:22:04

首先,您使用错误的类型并让编译器来计算转换,然后使用需要添加到代码库的扩展函数。

首先,传入数组中的类型,然后将其转换为带附件的I枚举类型,然后将其转换为数组,然后调用average (也是i枚举函数),同时average返回双(而不是int ),而如果将双值转换为int,则可能丢失不隐式转换的数据,并且需要在AveragePoints或平均值函数的输出上进行显式转换。

第二,从包含方法c#allows的静态类展开类函数,但是如果没有告诉编译器您正在使用它们,它不知道它们的存在,在这种情况下,展开函数位于System.Linq命名空间中,所以必须使用

代码语言:javascript
运行
复制
using System.Linq;
using System.Collections.Generic;
public class Kata
{
    public static bool BetterThanAverage(IEnumerable<int> ClassPoints, int YourPoints)
    {
        ClassPoints = ClassPoints.Append(YourPoints); // Add Yourpoints to the ClassPoints array
        int AveragePoints =(int) ClassPoints.Average(); // Get average points
        if (YourPoints > AveragePoints)
        { // Compare
            return true;
        }
        else
        {
            return false;
        }
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73141336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档