0

我正在学习 C#,但我对 C# 结构和从中找到最小值、最大值和平均值有些困惑。

我的结构声明如下;

    [Serializable]
    private struct students
    {   // Constructor Fills with default values

        public students(int x)
        {
            studentImage = " ";
            enrollmentDate = " ";
            firstName = " ";
            surname = " ";;
            englishGrade = 0;
            scienceGrade = 0;
            mathGrade = 0;
        }

        // Data types to be used in the Structure
        public string studentImage, enrollmentDate, firstName, surname;
        public int englishGrade, scienceGrade, mathGrade;

    }

   private ArrayList studentList; //This is used to work with the data

在结构中列出了多个学生以及他们的科目成绩。我正在寻找循环浏览“记录”并获得以下信息;

  • Structure/ArrayList 中的最低英语等级
  • Structure/ArrayList 中的最大英语等级
  • Structure/ArrayList 中的平均英语等级

我已经研究过订购 ArrayList,但我不能使用这种方式,因为我需要根据 firstName 订购数据。

谁能指出我正确的方向?/ 提供帮助?

4

3 回答 3

2

假设您真的想使用ArrayList

studentList = new ArrayList();
//Fill data
var maxEnglish = studentList.
    OfType<students>().
    Max(student => student.englishGrade);
var minEnglish = studentList.
    OfType<students>().
    Min(student => student.englishGrade);
var avgEnglish = studentList.
    OfType<students>().
    Average(student => student.englishGrade);

添加到您的using指令后:

using System.Linq;

但是为什么不使用具有泛型类型的列表,例如 aList<students>呢?这将使您的代码更具可读性和效率。此外,考虑到您声明students为 a struct, 中的每个插入都ArrayList代表一个装箱。它不是高性能的。

我将对您的代码进行以下编辑:

  • 更改students为一个类并将其重命名为Student. 如果一个struct大小的字段加在一起超过 16 个字节,则通常最好使用一个类。
  • 更改studentListList<Student>.
  • OfType删除多余的调用。
于 2013-01-14T17:19:19.143 回答
0

使用透明结构类型(具有所有公共字段的结构)很好,如果结构的唯一目的是保存或传递一组语义固定的离散数据项,则没有方法写入this构造函数和属性之外的字段设置器,结构的整个状态被封装在公共字段中,这些字段可以合法地采用对其各自类型有效的值的任何组合,并且结构中的默认值应与各自类型中的默认值匹配。您的studentstype 几乎符合该标准,但并不完全符合,因为它似乎代表了对学生特征的任意选择,并且没有特别的理由相信需要有关学生信息的每个人都需要相同的信息。此外,该设计似乎不必要地硬编码每个学生恰好拥有三个年级的事实。在某些情况下,这样的假设是合理的。例如,由于设计用于处理二维点的代码可能无法处理三维点,因此使用透明结构来保存二维点的坐标就可以了。如果出于某种目的需要 3d 点,则设计为使用 3d 点的代码将无法使用它,因此可以简单地使 3d 点成为一种新类型。相比之下,它'

于 2013-01-14T23:17:12.703 回答
-1

不要使用ArrayList. 看看通用列表

private List<students> studentList;

用法:

var studentWithMaxGrade = studentList.Max(student => student.englishGrade);
var studentWithMinGrade = studentList.Min(student => student.englishGrade);
var averageGrade = studentList.Average(student => student.englishGrade);

您可能还想让自己熟悉C# 命名约定

于 2013-01-14T17:19:34.550 回答