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
Methods
ReadFromStream(Stream)
Reads a context from a stream.
public static ExpressionCompilerContext ReadFromStream(Stream stream)
Parameters
streamStreamSource 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
TryGet(string, out object?)
Tries to resolve a symbol by name.
public bool TryGet(string name, out object? value)
Parameters
Returns
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
binderGetMemberBinderProvides information about the object that called the dynamic operation. The
binder.Nameproperty provides the name of the member on which the dynamic operation is performed. For example, for theConsole.WriteLine(sampleObject.SampleProperty)statement, wheresampleObjectis an instance of the class derived from the DynamicObject class,binder.Namereturns "SampleProperty". Thebinder.IgnoreCaseproperty specifies whether the member name is case-sensitive.resultobjectThe 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
binderInvokeMemberBinderProvides information about the dynamic operation. The
binder.Nameproperty provides the name of the member on which the dynamic operation is performed. For example, for the statementsampleObject.SampleMethod(100), wheresampleObjectis an instance of the class derived from the DynamicObject class,binder.Namereturns "SampleMethod". Thebinder.IgnoreCaseproperty specifies whether the member name is case-sensitive.argsobject[]The arguments that are passed to the object member during the invoke operation. For example, for the statement
sampleObject.SampleMethod(100), wheresampleObjectis derived from the DynamicObject class,args[0]is equal to 100.resultobjectThe 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
binderSetMemberBinderProvides information about the object that called the dynamic operation. The
binder.Nameproperty provides the name of the member to which the value is being assigned. For example, for the statementsampleObject.SampleProperty = "Test", wheresampleObjectis an instance of the class derived from the DynamicObject class,binder.Namereturns "SampleProperty". Thebinder.IgnoreCaseproperty specifies whether the member name is case-sensitive.valueobjectThe value to set to the member. For example, for
sampleObject.SampleProperty = "Test", wheresampleObjectis an instance of the class derived from the DynamicObject class, thevalueis "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
streamStreamDestination stream.
Remarks
Stream persistence serializes symbol names and values, including delegates and method groups.