2016-04-12 18 views
-3

Nesnelerin bir listesini (yani, bir List) ve belirli bir üyeden (veya bunların ilk oluşumundan önce) o listenin üyelerini bana verecek akıcı işlevini istiyorum.ListeBu yöntem

Kullanmakta olduğum şey. Daha temiz veya daha özlü bir yolu var mı?

public static List<T> Before<T>(this List<T> Source, T Value) 
{ 
    List<T> functionReturnValue = default(List<T>); 
    functionReturnValue = new List<T>(); 
    foreach (T Thing in Source) { 
     if (Thing.Equals(Value)) { 
      break; 
     } 
     functionReturnValue.Add(Thing); 
    } 
    return functionReturnValue; 
} 
+5

Reddetmedim, ama çekiciliğim. Aşağıya oy vermek istemezseniz, aşağı çekilmekten bahsetme. –

+2

Ve başka bir notta, burada girişimi önemlidir, çünkü ne yapmak istediğinizi gösterir. Orada olmasaydı, daha az insan bu soruyu sorduğun şeyi anlardı. –

+0

Hangi çözümün diğerinden daha "zarif" olduğuna nasıl karar verirdiniz? – mustaccio

cevap

5

Eh, "en şık" tamamen sübjektif ve ulaşılmaz, ancak TakeWhile kullanabilirsiniz: IEnumerable yerine List kullanarak size daha genel yapabiliriz

public static List<T> Before<T>(this List<T> Source, T Value) 
{ 
    return source.TakeWhile(i => !i.Equals(Value)).ToList(); 
} 

Not:

public static IEnumerable<T> Before<T>(this IEnumerable<T> Source, T Value) 
{ 
    return source.TakeWhile(i => !i.Equals(Value)); 
} 

Aslında doucmentation for TakeWhile bir örnek verir ki bu ically sadece dize karşılaştırmaları ile, istediğini yapar.

+0

İkinci cevabınız muhtemelen büyük olasılıkla indirgenemez derecede zariftir. Daha basit bir şey elde edemez, yine de işi bitirir. Ulaşılamaz değil; Sadece bunu başardınız. Zarif olarak, görsel olarak ayrıştırmak için gerekli olan en az zihinsel yapı sayısını (en kolay anlaşılır) kastediyorsak. – toddmo

İlgili konular