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 페이지 에 다른 이상한 점이 있습니다.