방프리
24.04.30 Chapter5. 동적 프로그래밍 (Item 46) 본문
Item 46 : 표현식 API의 사용법을 익혀두라
C#에 LINQ와 동적 지원 기능이 추가되면서 표현식과 표현식 트리를 사용해 동적 프로그래밍이 가능하다.
표현식은 코드처럼 보이며 많은 경우 델리게이트로 컴파일하여 사용한다.
표현식을 사용하게되면 여러 제약조건으로 메서드를 사용할 때 코드량을 줄이면서 유연하게 사용이 가능하다.
public TResult CallInterface<TResult>(Expression<Func<T, TResult>> op)
{
var exp = op.Body as MethodCallExpression;
var methodName = exp.Method.Name;
var methodInfo = exp.Method;
var allParameters = from element in exp.Arguments
select processArgument(element);
Console.WriteLine($"Calling {methodName}");
foreach (var param in allParameters)
Console.WriteLine(@$"\tParameter type = {param.ParmType}, Value = {param.ParmType}");
return default(TResult);
}
private (Type parmType, object ParmValue) processArgument(Expression element)
{
object argument = default(object);
LambdaExpression expression = Expression.Lambda(
Expression.Convert(element, element.Type));
Type parmType = expression.ReturnType;
argument = expression.Compile().DynamicInvoke();
return (parmType, argument);
}
//사용 시
var client = new ClientProxy<IService>();
var result = client.CallInterface<string>(server => server.DoWork(172));
'C# > More Effective C#' 카테고리의 다른 글
24.05.05 Chapter5. 동적 프로그래밍 (Item 47) (0) | 2024.05.05 |
---|---|
24.05.04 Chapter5. 동적 프로그래밍 (Item 43) (0) | 2024.05.04 |
24.04.29 Chapter5. 동적 프로그래밍 (Item 45) (0) | 2024.04.29 |
24.04.28 Chapter5. 동적 프로그래밍 (Item 44) (0) | 2024.04.28 |
24.04.24 Chapter4. 병렬 처리 (Item 42) (0) | 2024.04.24 |
Comments