2017-04-26 2 views
0

Ich habe ein Formular mit einem Formular mit 4 Felder, die Handys sind, muss ich validieren, dass keiner dieser 4 Felder innerhalb von ihnen wiederholt wird.Wie validieren, dass 4 Felder in keiner Weise wiederholt werden

Ich habe das selbst nicht entwickelt, dies wurde von einem unserer Entwickler gemacht, also frage ich mich, ob es eine Möglichkeit gibt, dies in einer Zeile mit linq oder Wörterbüchern zu tun?

private bool Celularesvalidation(string c1, string c2, string c3, string c4) 
{ 
    var rs = false; 
    if (!string.IsNullOrEmpty(c2)) 
    { 
     if (c1 == c2) 
     { 
      rs = true; 
     } 
    } 
    if (!string.IsNullOrEmpty(c3)) 
    { 
     if (c3 == c1 || c3 == c2) 
     { 
      rs = true; 
     } 
    } 
    if (!string.IsNullOrEmpty(c4)) 
    { 
     if (c4 == c1 || c4 == c2 || c4 == c3) 
     { 
      rs = true; 
     } 
    } 

    return rs; 
} 
+0

erste Frage, die ich stellen würde, ist 'Verstehen Sie auch die Code, der Ihnen ausgehändigt wurde? Lerne Lambda-Ausdrücke, du könntest dies auf so viele verschiedene Arten tun ... auch ..sind viele Beispiele im Internet, wie man das macht .. – MethodMan

+0

Ich verstehe es, aber es ist sehr hässlich, also frage ich mich, ob es eine gibt Liner-Code, um diese Validierung zu machen –

+0

Dieser Code erlaubt nur 'c1',' nullOrEmpty' zu sein und trotzdem 'true' zurückzugeben. Ist das Absicht oder ist es ein Fehler? –

Antwort

3

Nur eine Idee:

var cellphones = new string[] { c1, c2, c3, c4 }; 
bool allDistinct = cellphones.Distinct().Count() == cellphones.Count(); 
1

die unterschiedlichen Records und vergleichen.

private bool Celularesvalidation(string c1, string c2, string c3, string c4) 
{ 
    var cellPhones = new[] { c1,c2,c3,c4}; 
    var distinctCellPhones = cellPhones.Distinct(); 
    return distinctCellPhones.Count() < cellPhones.Count(); 
} 
1

Ja, Sie können es in einer Zeile tun, wenn Sie wirklich wollen. Dieses Beispiel enthält auch die Durchsetzung, dass keiner von ihnen sind null oder leer:

private bool CelularesValidation(string c1, string c2, string c3, string c4) 
{ 
    return new[] { c1, c2, c3, c4 }.Where(c => !string.IsNullOrEmpty(c)) 
     .Distinct().Count() == 4; 
} 
0

Eine andere Möglichkeit, gleiche tun

Using Linqpad

var list = new List<string> { c1, c2, c3, c4 }; 
    var result = list.GroupBy(l => l, (a, b) => new { Key = a, Count = b.Count() }).Where(obj => obj.Count > 1 && !string.IsNullOrWhiteSpace(obj.Key)).FirstOrDefault() != null; 
    result.Dump(); 
+0

Ich verstehe das nicht wirklich, können Sie mithelfen? –

+0

@ LuisValencia-MVP Ich habe der Lösung ein Bild hinzugefügt. Die beste Möglichkeit, dies in Aktion zu sehen, ist die Verwendung von Linqpad. Zuerst wird eine Gruppe durch und mit der Gruppierung für jeden es wird überprüft, ist einer von ihnen wiederholt und wenn wiederholt, gibt wahr zurück. – loneshark99

Verwandte Themen