Type.GetType
जो मैंने देखा है वह बहुत से लोगों को काटता है Type.GetType(string)
। वे आश्चर्य करते हैं कि यह अपनी विधानसभा में प्रकारों के लिए क्यों काम करता है, और कुछ प्रकार पसंद करते हैं System.String
, लेकिन नहीं System.Windows.Forms.Form
। इसका उत्तर यह है कि यह केवल वर्तमान विधानसभा और में दिखता है mscorlib
।
अनाम तरीके
C # 2.0 ने गुमनाम तरीके पेश किए, जिससे इस तरह की स्थिति खराब हो गई:
using System;
using System.Threading;
class Test
{
static void Main()
{
for (int i=0; i < 10; i++)
{
ThreadStart ts = delegate { Console.WriteLine(i); };
new Thread(ts).Start();
}
}
}
वह क्या छपेगा? खैर, यह पूरी तरह से शेड्यूलिंग पर निर्भर करता है। यह 10 नंबर प्रिंट करेगा, लेकिन यह संभवतः 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 प्रिंट नहीं करेगा, जो कि आप उम्मीद कर सकते हैं। समस्या यह है कि यह वह i
चर है जिस पर कब्जा कर लिया गया है, प्रतिनिधि के निर्माण के बिंदु पर इसका मूल्य नहीं है। इसे सही दायरे के एक अतिरिक्त स्थानीय चर के साथ आसानी से हल किया जा सकता है:
using System;
using System.Threading;
class Test
{
static void Main()
{
for (int i=0; i < 10; i++)
{
int copy = i;
ThreadStart ts = delegate { Console.WriteLine(copy); };
new Thread(ts).Start();
}
}
}
इटरेटर ब्लॉकों के आस्थगित निष्पादन
यह "गरीब आदमी की इकाई परीक्षण" पास नहीं है - क्यों नहीं?
using System;
using System.Collections.Generic;
using System.Diagnostics;
class Test
{
static IEnumerable<char> CapitalLetters(string input)
{
if (input == null)
{
throw new ArgumentNullException(input);
}
foreach (char c in input)
{
yield return char.ToUpper(c);
}
}
static void Main()
{
// Test that null input is handled correctly
try
{
CapitalLetters(null);
Console.WriteLine("An exception should have been thrown!");
}
catch (ArgumentNullException)
{
// Expected
}
}
}
इसका उत्तर यह है कि कोड के स्रोत के भीतर CapitalLetters
कोड इटमर के होने तक निष्पादित नहीं होता हैMoveNext()
तरीका पहले नहीं कहा जाता है।
मुझे अपने ब्रेनटेसर्स पृष्ठ पर कुछ और विषमताएँ मिली हैं ।