다음을 통해 공유


IArgumentProvider 인터페이스

정의

여러 트리 노드(DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression 및 IndexExpression)의 인수에 액세스하기 위한 내부 인터페이스를 제공합니다. 이 API는 내부 전용입니다.

public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
파생

설명

이 API를 사용하면 안됩니다. 어셈블리 리팩터링으로 인해 공용이며 내부 성능 최적화에만 존재합니다. 트리의 크기를 줄이는 두 가지 최적화를 사용할 수 있습니다.

  1. 노드가 대신 ReadOnlyCollection<T>IList<T> 유지할 수 있습니다. 이렇게 하면 각 노드에 대한 읽기 전용 컬렉션을 할당하는 비용이 절감됩니다.

  2. 특정 수의 인수(예Block2: , , Block2Block4)를 유지하는 특수 서브클래스를 만들 수 있습니다. 따라서 이러한 노드는 요소를 저장하기 위해 와 ReadOnlyCollection<T> 배열을 모두 할당하지 않으므로 노드당 32바이트를 저장합니다. 이 기술은 , InvocationExpressionMethodCallExpression를 비롯한 BlockExpression다양한 노드에서 사용됩니다.

식 트리 노드는 개체의 ReadOnlyCollection<T> 원래 LINQ 속성을 계속 노출합니다. 일반적으로 배열에 저장되는 배열 또는 요소를 모두 저장하기 위해 필드를 다시 사용하여 이 작업을 수행합니다.

배열 사례의 경우 컬렉션은 대신 ReadOnlyCollection<T>IList<T> 입력됩니다. 노드가 처음 생성되면 배열입니다. 이 라이브러리의 컴파일러 또는 유틸리티는 이 인터페이스를 통해 요소에 액세스합니다. 배열 요소에 액세스하면 배열 ReadOnlyCollection<T>이 로 승격됩니다.

개체의 경우 첫 번째 인수는 에 형식화된 필드에 저장됩니다 Object. 노드가 처음 생성되면 이 필드는 첫 번째 인수의 를 보유 Expression 합니다. 이 라이브러리의 컴파일러 및 유틸리티가 인수에 액세스하면 이 인터페이스를 다시 사용하고 첫 번째 인수의 접근자는 내부 Expression.ReturnObject<T>(System.Object) 도우미 메서드를 사용하여 또는 ReadOnlyCollection<T> 대/소문자를 처리하는 개체를 Expression 반환합니다. 사용자가 에 액세스하면 ReadOnlyCollection<T>개체 필드가 에 직접 ReadOnlyCollection<T>저장되도록 업데이트됩니다.

속성이 동일한 ReadOnlyCollection<T>를 일관되게 반환하는 Expression 것이 중요합니다. 그렇지 않으면 식 방문자가 사용하는 재작성 트리 워커가 중단됩니다. LINQ v1에서 동일한 Expression 노드와 다른 ReadOnlyCollection<T> 값을 반환하는 호환성이 손상되는 변경입니다. 현재 사용자는 개체 ID를 사용하여 노드가 변경되었는지 확인할 수 있습니다. 오버로드된 필드에 를 저장하면 ReadOnlyCollection<T> 메모리 사용량이 줄어들고 공용 API에 대한 호환성이 유지됩니다.

속성

ArgumentCount

인수 수를 식 트리 노드에 반환합니다. 이 API는 내부 전용입니다.

메서드

GetArgument(Int32)

index에서 인수를 반환하며, index가 범위를 벗어나는 경우 throw합니다. 이 API는 내부 전용입니다.

적용 대상