1

제목은이 제목에서 꽤 자명합니다.다른 DynamicExpression의 대체에서 DynamicExpression을 만드는 것이 안전합니까?

명확히하기 : 저는 동적 표현식을 사용하여 완전한 언어 인프라를 구축했으며 어셈블리 출력을 시도해 보는 것이 좋습니다. 경험이있는 사람이라면 누구나 "LambdaExpression.CompileToMethod"는 동적 표현식을 CallSite <>으로 변환하고 표현식에서 나중에 액세스 할 수있는 비공개 필드에 할당해야합니다.

일부 테스트 프로젝트에서이 작업을 성공적으로 수행했지만, (반복적으로) 모든 코드를 리팩터링하기 전에 내가 작성한 바인더 인스턴스에 대해 동일한 작업을 수행해야하는지 알 필요가 있습니다. 대체 프로세스.

protected override void FallbackInvoke(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion) { 
    // If I make a DynamicExpression here, does it need to be a CallSite<> ? 
    // Or since it's inside the context of an executing delegate (CallSite<>), 
    // is it considered "Live" ? 
} 

또한 Expression.Constant를 사용하면 메서드로 컴파일 할 때 제약이 있습니다. 그 한계는 바인더 내부에도 존재합니까? 아니면 "런타임"과 "안전"으로 간주됩니까?

답변

0

글쎄, 몇 가지 테스트 후. 예, 안전합니다. 폴백 중에 생성 된 DynamicExpressions은 CallSite <>로 변환 할 필요가 없습니다. 그러나 원래 표현식의 모든 DynamicExpressions에는 유의해야합니다.

관련 문제