Table of Contents

Class ExpressionCompilerContext

Namespace
Utils.Expressions
Assembly
Utils.dll

Represents a dynamic symbol context shared by expression compilers.

public class ExpressionCompilerContext : DynamicObject, IDynamicMetaObjectProvider
Inheritance
ExpressionCompilerContext
Implements
Inherited Members
Extension Methods

Properties

Symbols

Gets the symbol table used for runtime resolution.

public IDictionary<string, object?> Symbols { get; }

Property Value

IDictionary<string, object>

Methods

ReadFromStream(Stream)

Reads a context from a stream.

public static ExpressionCompilerContext ReadFromStream(Stream stream)

Parameters

stream Stream

Source stream.

Returns

ExpressionCompilerContext

A populated context.

Set(string, object?)

Adds or replaces a symbol in the context.

public void Set(string name, object? value)

Parameters

name string

Symbol name.

value object

Symbol value.

TryGet(string, out object?)

Tries to resolve a symbol by name.

public bool TryGet(string name, out object? value)

Parameters

name string

Symbol name.

value object

Resolved value.

Returns

bool

true when found; otherwise false.

TryGetMember(GetMemberBinder, out object?)

Provides the implementation for operations that get member values. Classes derived from the DynamicObject class can override this method to specify dynamic behavior for operations such as getting a value for a property.

public override bool TryGetMember(GetMemberBinder binder, out object? result)

Parameters

binder GetMemberBinder

Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member on which the dynamic operation is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty) statement, where sampleObject is an instance of the class derived from the DynamicObject class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive.

result object

The result of the get operation. For example, if the method is called for a property, you can assign the property value to result.

Returns

bool

true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a run-time exception is thrown.)

TryInvokeMember(InvokeMemberBinder, object?[]?, out object?)

Provides the implementation for operations that invoke a member. Classes derived from the DynamicObject class can override this method to specify dynamic behavior for operations such as calling a method.

public override bool TryInvokeMember(InvokeMemberBinder binder, object?[]? args, out object? result)

Parameters

binder InvokeMemberBinder

Provides information about the dynamic operation. The binder.Name property provides the name of the member on which the dynamic operation is performed. For example, for the statement sampleObject.SampleMethod(100), where sampleObject is an instance of the class derived from the DynamicObject class, binder.Name returns "SampleMethod". The binder.IgnoreCase property specifies whether the member name is case-sensitive.

args object[]

The arguments that are passed to the object member during the invoke operation. For example, for the statement sampleObject.SampleMethod(100), where sampleObject is derived from the DynamicObject class, args[0] is equal to 100.

result object

The result of the member invocation.

Returns

bool

true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.)

TrySetMember(SetMemberBinder, object?)

Provides the implementation for operations that set member values. Classes derived from the DynamicObject class can override this method to specify dynamic behavior for operations such as setting a value for a property.

public override bool TrySetMember(SetMemberBinder binder, object? value)

Parameters

binder SetMemberBinder

Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member to which the value is being assigned. For example, for the statement sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the DynamicObject class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive.

value object

The value to set to the member. For example, for sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the DynamicObject class, the value is "Test".

Returns

bool

true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.)

WriteToStream(Stream)

Writes this context to a stream.

public void WriteToStream(Stream stream)

Parameters

stream Stream

Destination stream.

Remarks

Stream persistence serializes symbol names and values, including delegates and method groups.