3 votes

Effectuer de nombreuses opérations sur plusieurs objets du même type

Je dispose de deux objets graphiques (disons une sorte de Table ) et je veux définir leurs styles. Le code trivial est le suivant :

table1.BorderWidth = 2;
table1.BorderColor = Color.GloriousPink;

table2.BorderWidth = 2;
table2.BorderColor = Color.GloriousPink;

(Le vrai code a plus de lignes).

Un moyen plus astucieux consiste à utiliser une méthode.

void Format Table(int tableIndex)
{
    Table table;
    if(tableIndex == 1)
        table = table1;
    if(tableIndex == 2)
        table = table2;
    table.BorderWidth = 2;
    table.BorderColor = Color.GloriousPink;
}

Je réfléchissais à un moyen de le rendre plus évolutif (les if / switch partie grandit vite), et j'ai trouvé :

foreach(Table table in new List<Table> { table1, table2 })
{
    table.BorderWidth = 2;
    table.BorderColor = Color.GloriousPink;
}

Elle est plus courte et les éventuelles tables supplémentaires sont ajoutées tout simplement. Y a-t-il un inconvénient à cela ?

7voto

Ian Points 13892

Rien ne saute aux yeux, mais je suivrais votre idée originale et mettrais cela dans une méthode, au lieu de passer dans le tableau actuel.

public void Format(Table table)
{
    table.BorderWidth = 2;
    table.BorderColor = Color.GloriousPink;
}

foreach(Table table in tables) 
{
   Format(table);
}

2voto

Ilya Ivanov Points 14673

Je ne connais pas vos exigences, mais que diriez-vous d'un style fonctionnel :

Action<Table> formatTable = (table) => {
    table.BorderWidth = 2;
    table.BorderColor = Color.GloriousPink;
};

new List<Table> { table1, table2 }.ForEach(formatTable);

Si tu n'aimes pas tout ça Action chose :

void FormatTable(Table table)
{
    table.BorderWidth = 2;
    table.BorderColor = Color.GloriousPink;
}

new List<Table>{ table1, table2 }.ForEach(FormatTable);

2voto

Henrik Points 16565

Laissez le compilateur créer le tableau :

void FormatTable(params Table[] tables)
{
    foreach(var table in tables)
    {
        table.BorderWidth = 2;
        table.BorderColor = Color.GloriousPink;
    }
}

et l'appeler comme ça :

FormatTables( table1, table2);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X