如何避免在 C# 中重复 "object.method()"?

How to avoid repeating "object.method()" in C#?

我必须在 C# 中对一个对象应用一个方法,但我必须多次这样做

stud1.setGrade(90);  stud1.setGrade(100);  stud1.setGrade(90);  stud1.setGrade(50);

你明白了……我知道有一种方法可以避免这种情况,就这样说吧:

stud1.setGrade(90)
     .setGrade(100)
     .setGrade(70);

但我不记得这在 C# 中是否正确,我在另一种编程语言中看到过它,但我不记得那是否是正确的做法。

刚好有SetGradereturnthis.

public Student SetGrade(int grade) {
    this.Grade = grade;
    return this;
}

为什么不将要设置的值添加到数组中,然后使用 foreach 调用 .setGrade?

int[] values = int[] {90, 100, 70};

foreach(int value in values)
{
  stud1.setGrade(value);
}

当 setGrade() returns 自身的一个实例,或者当您编写一个名为 setGrade() 的扩展方法(对于 class),returns 一个实例时,这应该是可能的本身。

public static Student SetGrade(this Student student, int value) {
  student.setGrade(value);
  return student;
}

这可以类似于以下方式使用:

stud1.SetGrade(90)
 .SetGrade(100)
 .SetGrade(70);

我给大家介绍一下List的概念。 List是一种存储同构数据的数据结构。您可以根据您的情况使用 List

List<int> myGrades=new List<int>();
myGrades.Add(90);
myGrades.Add(100);
myGrades.Add(70); //adding all the grades
//we will use foreach to loop through all the elements
foreach(int g in myGrades)
{
 stud1.setGrade(g); //all grades are set
}

这可以取 n 个值..

 private void SetGrade(params int[] grades)
        {
            foreach (var grade in grades)
            {
                this.Grade = grade;
            }
        }

调用SetGrade方法更简单:

SetGrade(90, 100, 70);

如果您无法访问 class(或作为练习),您也可以使用 params 关键字编写扩展。

public static class StudentExtensions
{
    public static void SetGrades(this Student student, params int[] values)
    {
        foreach (int grade in values)
        {
            student.SetGrade(grade);
        }
    }
}

你可以这样使用它:

stud1.SetGrades(90, 100, 70, 50);

(当然不一定要写成扩展)