2016-04-12 4 views
-3

私はオブジェクトリスト(List)を持っていて、が流暢なのメンバーを特定のメンバー(またはその最初の出現)より前のメンバーにする機能を望みます。List.Beforeメソッド

ここに私が使っているものがあります。よりクリーンで簡潔な方法がありますか?

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

私はダウンボートしませんでしたが、私は誘惑されます。あなたがダウン投票したくない場合は、ダウン投票していることについて話しません。 –

+2

また、あなたのやりたいことが示されているので、ここでのあなたの試みは重要です。それがなければ、この質問であなたが求めていることを理解する人が少なくなります。 –

+0

どのソリューションを他のものよりも「エレガント」にするか – mustaccio

答えて

5

まあは、「最もエレガント」は完全に主観的で実現不可能ですが、あなたはTakeWhile使用することができます:IEnumerable代わりのListを使用することによって、あなたがそれがより一般的にすることができ

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

注:

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

実際には、doucmentation for TakeWhileは、bas文字列の比較だけで、あなたが望むものを遂行します。

+0

あなたの2番目の答えはおそらく還元不可能なエレガントです。それはまだ簡単にはできませんが、まだ仕事を完了させる。それは達成不可能ではありません。あなたはただそれを達成しました。エレガントな定義は、視覚的に解析するために必要なメンタルコンストラクトの数が最も少ない(最も簡単に理解できる)ことを意味します。 – toddmo

関連する問題