2015-05-11 10 views
7

devo applicare un metodo a un oggetto in C#, ma devo farlo più volteCome evitare di ripetere "object.method()" in C#?

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

Si ottiene il punto ... La cosa è So che c'è un modo per evitare questo e appena messo in questo modo:

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

Ma non mi ricordo se è corretto in C#, l'ho visto in un altro linguaggio di programmazione, anche se non mi ricordo se questo è il modo corretto di farlo.

+1

potete inserire il metodo "setGrade"? – User2012384

+0

Un metodo 'SetGrades (90,100,70)' è sufficiente? – ja72

+1

Il termine di ricerca che stai cercando è "interfaccia fluente". LINQ (C#) e jQuery (JavaScript) sono esempi di tale concatenamento. –

risposta

3

Questo dovrebbe essere possibile quando setGrade() restituisce un'istanza di se stesso o quando si scrive un metodo di estensione chiamato setGrade() (per la classe) che restituisce un'istanza di se stesso.

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

Questo può quindi essere usate simili a:

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

Basta avere SetGrade restituire this.

11

Perché non aggiungere i valori che si desidera impostare in un array e quindi utilizzare un foreach per chiamare .setGrade?

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

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

Permettetemi di presentarvi il concetto di List a voi. List è una struttura di dati per memorizzare dati omogenei. È possibile utilizzare List per il proprio scenario.

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

Questo può richiedere n numero di valori ..

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

Calling SetGrade metodo è più facile:

SetGrade(90, 100, 70); 
0

Se non si ha accesso alla classe (o come esercizio) è anche possibile scrivere un'estensione con la parola chiave params.

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

Si può usare in questo modo:

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

(Naturalmente non c'è bisogno di scrivere come un'estensione.)

Problemi correlati