इस (पुन: उपयोग नहीं Linq के अंतर्निहित तरीकों (iterators) रीवाइंड के लिए जाना जाता है), बस ओपी के तर्क (जो मेरा मानना है कि performant है पुन: उपयोग का प्रयास करें, यह अगले पर फिर से मूल्यांकन नहीं करता हालत सूची के आधे) और एक साफ विस्तार विधि में यह पैकिंग और टपल:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Craft
{
class Act
{
static void Main(string[] args)
{
var a = new List<string>
{ "I", "Love", "You", "More", "Today", "Than", "Yesterday" };
var tx = a.SplitByCondition(s => s == "More");
foreach (var s in tx.Item1)
Console.WriteLine("First Half : {0}", s);
foreach (var s in tx.Item2)
Console.WriteLine("Second Half : {0}", s);
Console.ReadLine();
}
}//Act
public static class Helper
{
public static Tuple<List<T>, List<T>> SplitByCondition<T>
(this IEnumerable<T> t, Func<T, bool> terminator)
{
var tx = new Tuple<List<T>, List<T>>
(new List<T>(), new List<T>());
var iter = t.GetEnumerator();
while (iter.MoveNext())
{
if (terminator(iter.Current))
{
tx.Item2.Add(iter.Current);
break;
}
tx.Item1.Add(iter.Current);
}
while (iter.MoveNext())
tx.Item2.Add(iter.Current);
return tx;
}
}//Helper
}//Craft
आउटपुट:
First Half : I
First Half : Love
First Half : You
Second Half : More
Second Half : Today
Second Half : Than
Second Half : Yesterday
स्रोत
2011-01-06 17:11:23
मैं अपने कोड समझते हैं, लेकिन 'अगर (e.Current)' मतलब नहीं है। मुझे लगता है कि आप अंतिम 'MoveNext' कॉल (पहले लूप से) के मान को स्टोर करना चाहते हैं और यह देखने के लिए जांचें कि यह सफल था या नहीं। – Ani
अधिक समझने के लिए अपडेट किया गया है (यानी लूप – Anonym
के बाहर उस आइटम को संभालने के बजाय चेककंडिशन सत्य होने के बाद ई-कंटेंट को 'बी' में जोड़ें। हाँ, यह अभी स्पष्ट है। – Ani