को समझना मैं उपज कीवर्ड को बेहतर समझने की कोशिश कर रहा हूं और मुझे लगता है कि मेरे पास इसकी पर्याप्त समझ है, इसलिए मैंने कुछ परीक्षण चलाए, हालांकि परिणाम से मुझे आश्चर्य हुआ।उपज कीवर्ड और LINQ
अगर मैं नीचे दिए गए कोड मैं निम्नलिखित उत्पादन जो दिखाता है कि यह सिर्फ संख्या तक नहीं पूरी श्रृंखला से अधिक लूप मिल चलाने 4.
public void DoIt()
{
Console.WriteLine("Method Call");
var results = GetData(Enumerable.Range(1, 10));
Console.WriteLine("LINQ");
var filtered = results.Where(x => x == 4);
Console.WriteLine("Start result loop");
foreach (var item in filtered)
{
Console.WriteLine("Item is " + item);
}
}
private IEnumerable<int> GetData(IEnumerable<int> Input)
{
foreach (int item in Input)
{
if (item % 2 == 0)
{
Console.WriteLine("Found " + item);
yield return item;
}
}
}
आउटपुट:
Method Call
LINQ
Start result loop
Found 2
Found 4
Item is 4
Found 6
Found 8
Found 10
हैं मैं नीचे कोड चलाता हूं यह दिखाता है कि यह केवल 4 तक पहुंच जाता है और फिर बंद हो जाता है।
public void DoIt()
{
Console.WriteLine("Method Call");
var results = GetData(Enumerable.Range(1, 10));
Console.WriteLine("Start result loop");
foreach (var item in results)
{
if (item == 4)
{
Console.WriteLine("Item is " + item);
break;
}
}
}
private IEnumerable<int> GetData(IEnumerable<int> Input)
{
foreach (int item in Input)
{
if (item % 2 == 0)
{
Console.WriteLine("Found " + item);
yield return item;
}
}
}
आउटपुट:
Method Call
Start result loop
Found 2
Found 4
Item is 4
मुझे लगता है कि मैं कुछ understading नहीं कर रहा हूँ, लेकिन के रूप में अगर LINQ क्या मैं इसे करने की उम्मीद के विपरीत कर रहा है यह लग रहा है? हालांकि, LINQ ने उपज और स्थगित निष्पादन का भी उपयोग किया था और मैं उम्मीद करता हूं कि कोड के दूसरे सेट के परिणाम कोड के पहले सेट के लिए समान होंगे।
'कहां परिणाम फ़िल्टर करते हैं, जब कोई आइटम भविष्यवाणी को संतुष्ट करता है तो यह परिणाम लौटने से नहीं रोकता है। दूसरी तरफ, जब आपका पूर्वानुमान संतुष्ट हो जाता है तो आपका मैनुअल 'foreach' लूप टूट जाता है ... –