【问题标题】:How to avoid repeating "object.method()" in C#?如何避免在 C# 中重复“object.method()”?
【发布时间】:2015-07-21 11:53:32
【问题描述】:

我必须将方法应用于 C# 中的对象,但我必须多次这样做

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

你明白了......问题是我知道有一种方法可以避免这种情况,只是这样说:

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

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

【问题讨论】:

  • 你能发布“setGrade”方法吗?
  • SetGrades(90,100,70) 方法是否足够?
  • 您正在寻找的搜索词是“流畅的界面”。 LINQ (C#) 和 jQuery (JavaScript) 就是这种链接的例子。
  • 也称为“级联”成语。只需 return this 或您希望使用的任何语言的等效项。

标签: c# object methods


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    只要SetGrade返回this

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

    【讨论】:

      【解决方案3】:

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

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

      然后可以使用类似于:

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

      【讨论】:

        【解决方案4】:

        让我向您介绍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
        }
        

        【讨论】:

          【解决方案5】:

          这可以采用 n 个值..

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

          调用SetGrade方法更简单:

          SetGrade(90, 100, 70);
          

          【讨论】:

            【解决方案6】:

            如果您无法访问该课程(或作为练习),您也可以使用 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);
            

            (当然你不必把它写成扩展。)

            【讨论】:

              猜你喜欢
              • 2018-09-30
              • 2017-05-19
              • 2023-03-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多