Type.GetType
আমি দেখেছি যে তিনি প্রচুর লোককে কামড়ান Type.GetType(string)। তারা বিস্মিত হয় যে এটি কেন তাদের নিজস্ব সমাবেশে প্রকারের জন্য কাজ করে, এবং কিছু ধরণের পছন্দ করে System.Stringতবে তা নয় System.Windows.Forms.Form। উত্তরটি হ'ল এটি কেবল বর্তমান সমাবেশ এবং এর মধ্যে দেখায় mscorlib।
নামবিহীন পদ্ধতি
সি # 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()পদ্ধতিটি না বলা হওয়া পর্যন্ত কার্যকর করা হয় না ।
আমি আমার ব্রেইনটিজার পৃষ্ঠায় কিছু অন্যান্য বিজোড়তা পেয়েছি ।