Se si effettua questo tipo di confronto in un solo luogo, allora non è probabilmente vale la pena provare per renderlo più breve (soprattutto se ha un impatto la performance).
Tuttavia, se si confrontano le lunghezze lista in più di un luogo, è forse la pena metterlo in una funzione, allora riutilizzare molte volte:
static bool SameLength<T>(params IList<T>[] lists) {
int len = -1;
foreach (var list in lists) {
int list_len = list.Count;
if (len >= 0 && len != list_len)
return false;
len = list_len;
}
return true;
}
static void Main(string[] args) {
// All of these lists have same length (2):
var list1 = new List<int> { 1, 2 };
var list2 = new List<int> { 3, 4 };
var list3 = new List<int> { 5, 6 };
var list4 = new List<int> { 7, 8 };
var list5 = new List<int> { 9, 10 };
var list6 = new List<int> { 11, 12 };
if (SameLength(list1, list2, list3, list4, list5, list6)) {
// Executed.
}
// But this one is different (length 3):
var list7 = new List<int> { 11, 22, 33 };
if (SameLength(list1, list2, list3, list7, list4, list5, list6)) {
// Not executed.
}
}
--- EDIT ---
sulla base Dean Barnes' idea, si potrebbe anche fare questo per extra-corta implementazione:
static bool SameLength<T>(params IList<T>[] lists) {
return lists.All(list => list.Count == lists[0].Count);
}
fonte
2011-11-11 13:31:23
invece di 'Prendere (2) Count() == 1' preferisco il .Skip (1) .A' ny() 'idioma – sehe