방프리
24.04.28 Chapter5. 동적 프로그래밍 (Item 44) 본문
Item 44 : 동적 타이핑의 장단점을 이해하라
Cast<T>는 제네릭 메서드로, T타입으로 타입 변환이 가능하기만 하다면 어떤 타입이든 사용할 수 있다. 하지만 Cast<T>의 한계에 대해서 제대로 알지 못하면 예상대로 동작하지 않기에 제대로 알고 사용해야한다.
// 동작되지 않는 코드
var answer1 = GetSomeStrings().Cast<MyType>();
try
{
foreach (var v in answer1)
WriteLine(v);
}
catch (INvalidCastException)
{
WriteLine("Cast Failed!");
}
Cast<T>는 인수 런타임 타입에서 제공하는 사용자 정의 변환 함수에는 접근할 수 없다. 단순히 참조 변환가 박싱 변환만 가능하기에 Cast<T>는 T가 System.Object에 정의된 멤버만 가지고 있다고 가정하므로 사용자 정의 변환 함수에는 접근할 수 없다.
// 동적 타이핑을 통해 문제를 해결한 코드
var answer = from v in GetSomeStrings()
select (MyType)v;
foreach (var v in answer)
WriteLine(v);
C# 4.0의 동적 타이핑을 활용하여 리플렉션을 이용한 형변환 코드를 살펴보자
public static IEnumerable<TResult> Convert<TResult>(
this system.Collections.IEnumerable sequence)
{
foreach (object item in sequence)
{
dynamic coercion = (dynamic)item;
yield return (TResult)coercion;
}
}
'C# > More Effective C#' 카테고리의 다른 글
24.04.30 Chapter5. 동적 프로그래밍 (Item 46) (0) | 2024.04.30 |
---|---|
24.04.29 Chapter5. 동적 프로그래밍 (Item 45) (0) | 2024.04.29 |
24.04.24 Chapter4. 병렬 처리 (Item 42) (0) | 2024.04.24 |
24.04.23 Chapter4. 병렬 처리 (Item 41) (0) | 2024.04.23 |
24.04.20 Chapter4. 병렬 처리 (Item 40) (0) | 2024.04.20 |
Comments