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()메소드가 처음 호출 될 때까지 코드 소스 내의 코드가 실행되지 않는다는 것 입니다.
내 brainteasers 페이지 에 다른 이상한 점이 있습니다.