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()
পদ্ধতিটি না বলা হওয়া পর্যন্ত কার্যকর করা হয় না ।
আমি আমার ব্রেইনটিজার পৃষ্ঠায় কিছু অন্যান্য বিজোড়তা পেয়েছি ।