यह वास्तव में कुछ आसान होना चाहिए। लेकिन मैं इसे किसी भी तरह से पूछने जा रहा हूं, क्योंकि मुझे लगता है कि अन्य इसके साथ भी संघर्ष करेंगे। निम्नलिखित सरल LINQ क्वेरी को हमेशा पहले उपयोग करने के बजाय हमेशा नए चर-मूल्य के साथ निष्पादित नहीं किया जाता है?LINQ के स्थगित निष्पादन, लेकिन कैसे?
static void Main(string[] args)
{
Console.WriteLine("Enter something:");
string input = Console.ReadLine(); // for example ABC123
var digits = input.Where(Char.IsDigit); // 123
while (digits.Any())
{
Console.WriteLine("Enter a string which doesn't contain digits");
input = Console.ReadLine(); // for example ABC
}
Console.WriteLine("Bye");
Console.ReadLine();
}
टिप्पणी की नमूने में यह बाद से इनपुट ABC123
अंक हैं पाश में प्रवेश करेंगे। लेकिन digits
से 123
के बाद से ABC
जैसे कुछ दर्ज करने पर भी यह कभी नहीं छोड़ेगा।
तो LINQ क्वेरी नए input
-value का मूल्यांकन क्यों नहीं करती है लेकिन हमेशा पहले? और अधिक सुरुचिपूर्ण - - पाश में सीधे क्वेरी का उपयोग करके
while (digits.Any())
{
Console.WriteLine("Enter a string which doesn't contain digits");
input = Console.ReadLine();
digits = input.Where(Char.IsDigit); // now it works as expected
}
या:
while (input.Any(Char.IsDigit))
{
// ...
}
जब आप किसी चरम पर पैरामीटर के रूप में एक चर को पास करते हैं, तो यह मान द्वारा पारित किया जाता है। –
इस तरह के जटिल साइड इफेक्ट्स के साथ कोड का एक साधारण प्रतीत होता है। –
पवित्र गाय, आपको वास्तविक रेमंड चेन ™ का जवाब मिला! –