2017-08-08 5 views
1

J'ai une déclaration comme celle-ci, comment puis-je optimiser cette logique. Je pense environ 1 heure mais je ne trouve pas.Code propre pour If Déclaration

Comment simplifier cette logique?

if (model.WaitingChecked) 
{ 
    if (model.selectedStatus != 0) 
    { 
     model.DataList = data.Where(x => x.status != 6 && x.status == model.selectedStatus); 
     return View(model); 
    } 

    model.DataList = data.Where(x => x.status != 6); 
    return View(model); 
} 

if (model.SelectedStatus != 0) 
{ 
    model.DataList = data.Cast<DataDetailedList>().Where(x => x.status == model.selectedStatus); 
    return View(model); 
} 
+0

Qu'est-ce que cela fait model.WaitingChecked? – Pirate

+0

Je ne vois aucun moyen de vraiment simplifier ici, sauf si vous pouvez combiner les conditions. Un expert de Scala pourrait avoir plus à dire. –

+0

Je veux dire que je dois utiliser 3 fois la vue de retour (modèle). Cela ne semble pas optimisé. @Pirate c'est une case à cocher sur la vue. –

Répondre

2

vous pouvez utiliser la correspondance de motif sur les différentes conditions. Rappelez-vous que l'appariement de motifs doit être exhaustif. Ce qui signifie que toutes les combinaisons de valeurs doivent être définies.

(model.WaitingChecked, model.selectedStatus) match{ 
    case (true, 0) => 
    model.DataList = data.Where(x => x.status != 6) 
    View(model) 
    case (true, _) => 
    model.DataList = data.Where(x => x.status != 6 && x.status == model.selectedStatus) 
    View(model) 
    case (_, 0) => 
    //missing logic for model.selectedStatus is zero return 
    case (_, _) => 
    model.DataList = data.Cast<DataDetailedList>().Where(x => x.status == model.selectedStatus) 
    View(model) 
} 
+0

est également logique 'model.selectedStatus' d'être un ADT - donc compilateur vérifier l'exhaustivité. – dveim

+0

Merci pour Java. Mais en travaillant sur C#. :) –