2015-05-11 12 views
7

muszę zastosować metodę do obiektu w C#, ale muszę to zrobić wiele razyJak uniknąć powtarzania "object.method()" w języku C#?

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

dostać punkt ... Chodzi o to, wiem, że jest to sposób na uniknięcie tego i po prostu umieścić to tak:

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

Ale nie pamiętam, czy to jest poprawne w języku C#, widziałam go w innym języku programowania, chociaż nie pamiętam, czy to jest właściwy sposób to zrobić.

+1

można opublikować „setGrade” metody? – User2012384

+0

Czy wystarczy metoda 'SetGrades (90,100,70)'? – ja72

+1

Szukane słowo to "płynny interfejs". LINQ (C#) i jQuery (JavaScript) są przykładami takich łańcuchów. –

Odpowiedz

3

Powinno to być możliwe, gdy setGrade() zwraca instancję sama lub gdy piszesz metodę rozszerzenia nazwie setGrade() (dla klasy), która zwraca instancję sobie.

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

ta może być następnie wykorzystana podobna do:

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

Wystarczy SetGrade return this.

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

Dlaczego nie dodać wartości, które mają być ustawione do tablicy, a następnie użyć foreach zadzwonić .setGrade?

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

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

Pozwól mi przedstawić koncepcję List do ciebie. List to struktura danych do przechowywania jednorodnych danych. Możesz użyć List dla swojego scenariusza.

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 
} 
0

ten może trwać n liczba wartości ..

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

Wywołanie SetGrade metoda jest łatwiejsza:

SetGrade(90, 100, 70); 
0

Jeśli nie masz dostępu do tej klasy (lub jako ćwiczenie) możesz również napisać rozszerzenie z parametrem params.

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

Można go używać tak:

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

(Oczywiście nie trzeba pisać je jako rozszerzenie).

Powiązane problemy