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()
จะเรียกเมธอดiterator เป็นครั้งแรก
ฉันมีความแปลกประหลาดอื่น ๆ บางบนของหน้า brainteasers