34 internal readonly decimal
Key;
113 switch (
node.NodeType)
170 else if (
node.Type.IsByRef &&
node.Type.GetElementType() ==
type)
185 if (
node.Expression !=
null)
229 else if (
node.ArgumentCount == 1)
262 switch (
node.NodeType)
293 if (
node.Expression !=
null)
319 if (
node.Indexer ==
null || !
node.Indexer.CanWrite)
330 if (
node.Object !=
null)
687 bool flag =
leftType.IsNullableType();
903 switch (
node.NodeType)
1051 lambda.ValidateArgumentCount();
1086 _ilg.EmitLoadArg(0);
1130 switch (
node.NodeType)
1273 if (
node.Indexer !=
null)
1298 if (
node.Indexer !=
null)
1344 if (
obj !=
null &&
obj.Type.IsValueType)
1393 if (
pi.IsByRefParameter())
1421 if (
mi.DeclaringType.IsValueType)
1559 if (
type.IsNullableType())
1573 if (
type.IsValueType)
1620 switch (
node.Left.NodeType)
1730 else if (
type.IsValueType)
1749 for (
int i = 0; i <
count; i++)
1752 _ilg.EmitPrimitive(i);
1852 if (
init.NewExpression.Type.IsValueType &&
init.Bindings.
Count > 0)
1877 for (
int i = 0; i <
count; i++)
1891 if (
init.NewExpression.Type.IsValueType)
1916 for (
int i = 0; i <
count; i++)
2028 for (
int num =
paramList.Length; i < num; i++)
2105 },
this,
node, flags);
2111 switch (
node.NodeType)
2278 bool flag = inner._boundConstants.Count > 0;
2380 value.ValidateFinish();
2465 _ilg.EmitHasValue(
b.Left.Type);
2468 if (
b.Conversion !=
null)
2472 if (!
parameter.Type.IsAssignableFrom(
b.Left.Type))
2475 _ilg.EmitGetValueOrDefault(
b.Left.Type);
2490 _ilg.EmitGetValueOrDefault(
b.Left.Type);
2537 if (
b.Right.Type.IsValueType)
2725 switch (
node.NodeType)
2756 if (
node.Method !=
null)
2770 if (
node.Method !=
null)
2777 if (
node.Right.Type.IsNullableType())
2780 _ilg.EmitHasValue(
node.Right.Type);
2790 if (
node.Left.Type.IsNullableType())
2801 else if (
node.Left.Type.IsNullableType() ||
node.Right.Type.IsNullableType())
2829 if (
node.Method !=
null ||
node.IsLifted)
2913 NeedsClosure = _scope.NeedsClosure
2924 return blockExpression.Variables.Count > 0;
3003 if (
node.Comparison ==
null)
3005 return node.Cases[0].TestValues[0].Type;
3007 Type type =
node.Comparison.GetParametersCached()[1].ParameterType.GetNonRefType();
3017 decimal num =
key - buckets[0].Key + 1
m;
3018 if (num > 2147483647
m)
3022 return (decimal)((buckets.Count +
count) * 2) > num;
3027 while (buckets.Count > 1)
3036 buckets.RemoveAt(buckets.Count - 1);
3042 if (buckets.Count > 0)
3058 if ((uint)(typeCode - 4) <= 8
u)
3067 if (
node.Comparison !=
null)
3084 for (
int i = 0; i <
node.Cases.
Count; i++)
3118 return (
int)(char)
value;
3151 if (
node.DefaultBody !=
null || i <
count - 1)
3163 if (
node.DefaultBody !=
null)
3175 int num = (int)(((
long)
first + (
long)
last + 1) / 2);
3176 if (
first == num - 1)
3196 if (bucket.
Count == 1)
3204 if (
info.Is64BitSwitch)
3215 decimal
key = bucket[0].Key;
3221 if (
info.Is64BitSwitch)
3225 int num = (int)(bucket[bucket.
Count - 1].Key - bucket[0].Key + 1
m);
3237 if (
info.Is64BitSwitch)
3289 BlockExpression node2 =
Expression.
Block(
new TrueReadOnlyCollection<ParameterExpression>(
parameterExpression2,
parameterExpression),
new TrueReadOnlyCollection<Expression>(
Expression.
Assign(
parameterExpression,
node.SwitchValue),
Expression.
IfThenElse(
Expression.
Equal(
parameterExpression,
Expression.
Constant(
null,
typeof(
string))),
Expression.
Assign(
parameterExpression2,
Utils.
Constant(
value)),
Expression.
IfThenElse(
CallTryGetValue(
dictInit,
parameterExpression,
parameterExpression2),
Utils.
Empty,
Expression.
Assign(
parameterExpression2,
Utils.
Constant(-1)))),
Expression.
Switch(
node.Type,
parameterExpression2,
node.DefaultBody,
null,
builder.ToReadOnly())));
3295 [
UnconditionalSuppressMessage(
"ReflectionAnalysis",
"IL2026:RequiresUnreferencedCode", Justification =
"The method will be preserved by the DynamicDependency.")]
3357 if (handler.
Filter ==
null)
3471 if (
node.Method !=
null)
3478 if (
type.IsNullableType())
3619 switch (
type.GetTypeCode())
3652 if (
node.Method !=
null)
3654 if (!
node.IsLifted || (
node.Type.IsValueType &&
node.Operand.Type.IsValueType))
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
bool ICollection< KeyValuePair< TKey, TValue > >. Contains(KeyValuePair< TKey, TValue > keyValuePair)
void AddRange(IEnumerable< KeyValuePair< TKey, TValue > > collection)
void Add(TKey key, TValue value)
static decimal ToDecimal(object? value)
static Exception Unreachable
static ConstructorInfo GetNullableConstructor(Type nullableType)
static MethodInfo GetArrayGetMethod(Type arrayType)
static bool AreEquivalent(Type t1, Type t2)
static MethodInfo GetBooleanOperator(Type type, string name)
static bool AreReferenceAssignable(Type dest, Type src)
static MethodInfo GetArraySetMethod(Type arrayType)
static MethodInfo GetArrayAddressMethod(Type arrayType)
static CultureInfo InvariantCulture
static ConstructorInfo Nullable_Boolean_Ctor
static MethodInfo String_op_Equality_String_String
static MethodInfo String_Equals_String_String
static ConstructorInfo DictionaryOfStringInt32_Ctor_Int32
static MethodInfo RuntimeOps_Quote
static MethodInfo DictionaryOfStringInt32_Add_String_Int32
static ConstructorInfo Closure_ObjectArray_ObjectArray
static MethodInfo MethodInfo_CreateDelegate_Type_Object
ParameterExpression? Variable
readonly Dictionary< object, CompilerScope > Scopes
void EmitConstant(LambdaCompiler lc, object value, Type type)
void EmitCacheConstants(LambdaCompiler lc)
HoistedLocals NearestHoistedLocals
void EmitSet(ParameterExpression variable)
void EmitGet(ParameterExpression variable)
CompilerScope Enter(LambdaCompiler lc, CompilerScope parent)
void EmitAddressOf(ParameterExpression variable)
void EmitVariableAccess(LambdaCompiler lc, ReadOnlyCollection< ParameterExpression > vars)
HashSet< BlockExpression > MergedScopes
void AddLocal(LambdaCompiler gen, ParameterExpression variable)
readonly ParameterExpression SelfVariable
bool ContainsTarget(LabelTarget target)
bool TryGetLabelInfo(LabelTarget target, out LabelInfo info)
readonly LabelScopeInfo Parent
readonly LabelScopeKind Kind
readonly SwitchExpression Node
SwitchInfo(SwitchExpression node, LocalBuilder value, Label @default)
readonly bool Is64BitSwitch
readonly LocalBuilder Value
SwitchLabel(decimal key, object constant, Label label)
static Delegate Compile(LambdaExpression lambda)
void EmitInstance(Expression instance, out Type type)
void EmitSwitchBuckets(SwitchInfo info, List< List< SwitchLabel > > buckets, int first, int last)
void EmitMethodCallExpression(Expression expr)
void EmitMethodAndAlso(BinaryExpression b, CompilationFlags flags)
MemberExpression CreateLazyInitializedField< T >(string name)
void EmitUnliftedOrElse(BinaryExpression b)
static CompilationFlags UpdateEmitAsTypeFlag(CompilationFlags flags, CompilationFlags newValue)
void EmitCall(Type objectType, MethodInfo method)
readonly StackGuard _guard
void EmitExpressionAsVoid(Expression node)
static decimal ConvertSwitchValue(object value)
void AddressOf(ParameterExpression node, Type type)
void EmitMemberListBinding(MemberListBinding binding)
readonly BoundConstants _boundConstants
LabelScopeInfo _labelBlock
void EmitMethodCall(MethodInfo mi, IArgumentProvider args, Type objectType, CompilationFlags flags)
void EmitConvertUnaryExpression(Expression expr, CompilationFlags flags)
static Type GetTestValueType(SwitchExpression node)
void EmitReferenceCoalesceWithoutConversion(BinaryExpression b)
Delegate CreateDelegate()
void EmitUnaryMethod(UnaryExpression node, CompilationFlags flags)
readonly AnalyzedTree _tree
void EmitLiftedToNullRelational(ExpressionType op, Type type)
void EmitBranchNot(bool branch, UnaryExpression node, Label label)
void EmitQuoteUnaryExpression(Expression expr)
void EmitBlockExpression(Expression expr, CompilationFlags flags)
static bool CanOptimizeSwitchType(Type valueType)
void EmitAddress(Expression node, Type type)
LambdaCompiler(LambdaCompiler parent, LambdaExpression lambda, InvocationExpression invocation)
@ EmitExpressionStartMask
void EmitThrowUnaryExpression(Expression expr)
void EmitLift(ExpressionType nodeType, Type resultType, MethodCallExpression mc, ParameterExpression[] paramList, Expression[] argList)
static void MergeBuckets(List< List< SwitchLabel > > buckets)
void EmitLambdaBody(CompilerScope parent, bool inlined, CompilationFlags flags)
static bool IsChecked(ExpressionType op)
static bool Significant(Expression node)
void EmitMethodCall(Expression obj, MethodInfo method, IArgumentProvider methodCallExpr)
void EmitAssignBinaryExpression(Expression expr)
void EmitSwitchBucket(SwitchInfo info, List< SwitchLabel > bucket)
static bool NotEmpty(Expression node)
static Expression GetEqualityOperand(Expression expression)
void EmitRuntimeVariablesExpression(Expression expr)
void EmitDefaultExpression(Expression expr)
WriteBack AddressOfWriteBackCore(IndexExpression node)
LabelInfo ReferenceLabel(LabelTarget node)
void AddReturnLabel(LambdaExpression lambda)
readonly KeyedStack< Type, LocalBuilder > _freeLocals
void EmitAddress(Expression node, Type type, CompilationFlags flags)
bool TryEmitHashtableSwitch(SwitchExpression node, CompilationFlags flags)
bool TryEmitSwitchInstruction(SwitchExpression node, CompilationFlags flags)
WriteBack AddressOfWriteBack(MemberExpression node)
void EmitAndAlsoBinaryExpression(Expression expr, CompilationFlags flags)
void EmitListInitExpression(Expression expr)
void EmitUnaryExpression(Expression expr, CompilationFlags flags)
void EmitMethodCallExpression(Expression expr, CompilationFlags flags)
void EmitMemberInitExpression(Expression expr)
void EmitUnary(UnaryExpression node, CompilationFlags flags)
void AddressOf(MethodCallExpression node, Type type)
void EmitSwitchExpression(Expression expr, CompilationFlags flags)
void DefineBlockLabels(Expression node)
WriteBack EmitAddressWriteBack(Expression node, Type type)
delegate void WriteBack(LambdaCompiler compiler)
void EmitVariableAssignment(AssignBinaryExpression node, CompilationFlags flags)
void EmitConstantOne(Type type)
void EmitLiftedBinaryOp(ExpressionType op, Type leftType, Type rightType, Type resultType, bool liftedToNull)
void EmitExpressionAsVoid(Expression node, CompilationFlags flags)
readonly bool _hasClosureArgument
void EmitLiftedOrElse(BinaryExpression b)
void EmitExpression(Expression node)
void EmitMemberInit(ReadOnlyCollection< MemberBinding > bindings, bool keepOnStack, Type objectType)
WriteBack AddressOfWriteBackCore(MemberExpression node)
void EmitNullableCoalesce(BinaryExpression b)
void EmitExpressionAddress(Expression node, Type type)
static Type[] GetParameterTypes(LambdaExpression lambda, Type firstType)
readonly ILGenerator _ilg
void EmitGetIndexCall(IndexExpression node, Type objectType)
void EmitExpressionAndBranch(bool branchValue, Expression node, Label label)
void EmitMemberInit(MemberInitExpression init)
void EmitBranchOp(bool branch, Label label)
void EmitCatchStart(CatchBlock cb)
LocalBuilder GetLocal(Type type)
bool TryPushLabelBlock(Expression node)
void EmitBinding(MemberBinding binding, Type objectType)
void EmitIndexAssignment(AssignBinaryExpression node, CompilationFlags flags)
void EmitDynamicExpression(Expression expr)
static FieldInfo GetCallSiteTargetField(Type siteType)
void EmitListInit(ReadOnlyCollection< ElementInit > initializers, bool keepOnStack, Type objectType)
void EmitBranchLogical(bool branch, BinaryExpression node, Label label)
void EmitMemberMemberBinding(MemberMemberBinding binding)
void EmitBinaryOperator(ExpressionType op, Type leftType, Type rightType, Type resultType, bool liftedToNull)
void AddressOf(UnaryExpression node, Type type)
void EmitMethodOrElse(BinaryExpression b, CompilationFlags flags)
void EmitTryExpression(Expression expr)
void AddressOf(IndexExpression node, Type type)
static void AddToBuckets(List< List< SwitchLabel > > buckets, SwitchLabel key)
void EmitInlinedInvoke(InvocationExpression invoke, CompilationFlags flags)
void EmitLiftedBinaryArithmetic(ExpressionType op, Type leftType, Type rightType, Type resultType)
void EmitSetArrayElement(Type arrayType)
static bool FitsInBucket(List< SwitchLabel > buckets, decimal key, int count)
void EmitConvertArithmeticResult(ExpressionType op, Type resultType)
LocalBuilder GetInstanceLocal(Type type)
readonly MethodInfo _method
void EnterScope(object node)
void Emit(BlockExpression node, CompilationFlags flags)
void EmitQuote(UnaryExpression quote)
void EmitOrElseBinaryExpression(Expression expr, CompilationFlags flags)
void EmitDebugInfoExpression(Expression expr)
void EmitAssign(AssignBinaryExpression node, CompilationFlags emitAs)
void EmitUnliftedBinaryOp(ExpressionType op, Type leftType, Type rightType)
void EmitConstantArray< T >(T[] array)
void EmitUnliftedAndAlso(BinaryExpression b)
static int s_lambdaMethodIndex
void EmitUnboxUnaryExpression(Expression expr)
void EmitLambdaArgument(int index)
void EmitBranchBlock(bool branch, BlockExpression node, Label label)
void EmitLiftedRelational(ExpressionType op, Type type)
void EmitTypeBinaryExpression(Expression expr)
void EmitClosureCreation(LambdaCompiler inner)
CompilationFlags EmitExpressionStart(Expression node)
void PopLabelBlock(LabelScopeKind kind)
void EmitNewArrayExpression(Expression expr)
void EmitConstantExpression(Expression expr)
void EmitShiftMask(Type leftType)
void DefineSwitchCaseLabel(SwitchCase @case, out Label label, out bool isGoto)
void EmitLambdaReferenceCoalesce(BinaryExpression b)
void PushLabelBlock(LabelScopeKind type)
void EmitBranchAnd(bool branch, BinaryExpression node, Label label)
void EmitConvert(UnaryExpression node, CompilationFlags flags)
static bool UseVirtual(MethodInfo mi)
void EmitBinaryExpression(Expression expr, CompilationFlags flags)
void EmitMethodCall(MethodInfo mi, IArgumentProvider args, Type objectType)
void EmitBinaryMethod(BinaryExpression b, CompilationFlags flags)
void EmitLiftedAndAlso(BinaryExpression b)
static bool HasVariables(object node)
static AnalyzedTree AnalyzeLambda(ref LambdaExpression lambda)
void EmitListInit(ListInitExpression init)
WriteBack AddressOfWriteBack(IndexExpression node)
IParameterProvider Parameters
static readonly FieldInfo s_callSiteTargetField
void EmitGetArrayElement(Type arrayType)
void EmitParameterExpression(Expression expr)
List< WriteBack > EmitArguments(MethodBase method, IArgumentProvider args, int skipParameters)
static CompilationFlags UpdateEmitAsTailCallFlag(CompilationFlags flags, CompilationFlags newValue)
void EmitLiftedBooleanOr()
void EmitMemberAssignment(AssignBinaryExpression node, CompilationFlags flags)
void EmitInvocationExpression(Expression expr, CompilationFlags flags)
LabelInfo EnsureLabel(LabelTarget node)
static MethodCallExpression CallTryGetValue(Expression dictInit, ParameterExpression switchValue, ParameterExpression switchIndex)
void AddressOf(MemberExpression node, Type type)
void EmitConditionalExpression(Expression expr, CompilationFlags flags)
void EmitDelegateConstruction(LambdaExpression lambda)
void ExitScope(object node)
void EmitUnaryOperator(ExpressionType op, Type operandType, Type resultType)
void EmitSaveExceptionOrPop(CatchBlock cb)
void EmitSwitchCases(SwitchExpression node, Label[] labels, bool[] isGoto, Label @default, Label end, CompilationFlags flags)
void EmitLiftedBooleanAnd()
static bool MethodHasByRefParameter(MethodInfo mi)
void EmitMemberAddress(MemberInfo member, Type objectType)
void EmitExpressionEnd(CompilationFlags flags)
void EmitThrow(UnaryExpression expr, CompilationFlags flags)
void EmitWriteBack(List< WriteBack > writeBacks)
void EmitConstant(object value, Type type)
void EmitBranchComparison(bool branch, BinaryExpression node, Label label)
int GetLambdaArgument(int index)
void EmitConstant(object value)
void EmitExpressionAsType(Expression node, Type type, CompilationFlags flags)
void EmitMemberGet(MemberInfo member, Type objectType)
void EmitMemberAssignment(MemberAssignment binding, Type objectType)
List< WriteBack > EmitArguments(MethodBase method, IArgumentProvider args)
LabelInfo DefineLabel(LabelTarget node)
readonly LambdaExpression _lambda
void EmitDelegateConstruction(LambdaCompiler inner)
void EmitIndexExpression(Expression expr)
void EmitLabelExpression(Expression expr, CompilationFlags flags)
void AddressOf(BinaryExpression node, Type type)
void EmitBranchOr(bool branch, BinaryExpression node, Label label)
void EmitCoalesceBinaryExpression(Expression expr)
static Type GetMemberType(MemberInfo member)
void EmitClosureArgument()
void EmitNullEquality(ExpressionType op, Expression e, bool isLiftedToNull)
void EmitGotoExpression(Expression expr, CompilationFlags flags)
void EmitBinaryExpression(Expression expr)
readonly Dictionary< LabelTarget, LabelInfo > _labelInfo
void EmitLambdaExpression(Expression expr)
void EmitSetIndexCall(IndexExpression node, Type objectType)
void FreeLocal(LocalBuilder local)
LambdaCompiler(AnalyzedTree tree, LambdaExpression lambda)
void EmitLoopExpression(Expression expr)
void EmitNewExpression(Expression expr)
void EmitUnreachable(Expression node, CompilationFlags flags)
void EmitMemberExpression(Expression expr)
void EmitMethodCall(Expression obj, MethodInfo method, IArgumentProvider methodCallExpr, CompilationFlags flags)
void EmitExpression(Expression node, CompilationFlags flags)
static CompilationFlags UpdateEmitExpressionStartFlag(CompilationFlags flags, CompilationFlags newValue)
static LambdaExpression AnalyzeLambda(LambdaExpression lambda)
static AnalyzedTree Bind(LambdaExpression lambda)
static AnalyzeTypeIsResult AnalyzeTypeIs(TypeBinaryExpression typeIs)
static bool IsNull(Expression e)
static Exception TryNotAllowedInFilter()
static Exception NonAbstractConstructorRequired()
static Exception CannotAutoInitializeValueTypeElementThroughProperty(object p0)
static Exception RethrowRequiresCatch()
static Exception UnexpectedVarArgsCall(object p0)
static Exception CannotAutoInitializeValueTypeMemberThroughProperty(object p0)
static SwitchExpression Switch(Expression switchValue, params SwitchCase[]? cases)
static ConstantExpression Constant(object? value)
static BlockExpression Block(Expression arg0, Expression arg1)
static MethodCallExpression Call(MethodInfo method)
static BinaryExpression Assign(Expression left, Expression right)
static SwitchCase SwitchCase(Expression body, params Expression[] testValues)
static ParameterExpression Parameter(Type type)
static ListInitExpression ListInit(NewExpression newExpression, params Expression[] initializers)
static ConditionalExpression IfThenElse(Expression test, Expression ifTrue, Expression ifFalse)
static ElementInit ElementInit(MethodInfo addMethod, params Expression[] arguments)
static ConditionalExpression Condition(Expression test, Expression ifTrue, Expression ifFalse)
static NewExpression New(ConstructorInfo constructor)
static UnaryExpression Convert(Expression expression, Type type)
static BinaryExpression Equal(Expression left, Expression right)
static ParameterExpression Variable(Type type)
ParameterExpression IParameterProvider. GetParameter(int index)
static MethodInfo GetCompileMethod(Type lambdaExpressionType)
int IParameterProvider. ParameterCount
bool TryEnterOnCurrentStack()
ReadOnlyCollection< Expression > TestValues
static ConstantExpression Constant(bool value)
static readonly DefaultExpression Empty
static MemberExpression GetStrongBoxValueField(Expression strongbox)
static int Sign(decimal value)
virtual void EndExceptionBlock()
virtual LocalBuilder DeclareLocal(Type localType)
virtual void MarkLabel(Label loc)
virtual void BeginFinallyBlock()
virtual void Emit(OpCode opcode)
virtual Label BeginExceptionBlock()
virtual Label DefineLabel()
virtual void EmitCall(OpCode opcode, MethodInfo methodInfo, Type[]? optionalParameterTypes)
virtual void BeginExceptFilterBlock()
virtual void BeginFaultBlock()
virtual void BeginCatchBlock(Type exceptionType)
static readonly OpCode Castclass
static readonly OpCode Ldloca
static readonly OpCode Unbox
static readonly OpCode Brfalse
static readonly OpCode Conv_I4
static readonly OpCode Blt_Un
static readonly OpCode Rem
static readonly OpCode Tailcall
static readonly OpCode Unbox_Any
static readonly OpCode Blt
static readonly OpCode Callvirt
static readonly OpCode Mul
static readonly OpCode Brtrue
static readonly OpCode Clt
static readonly OpCode Br_S
static readonly OpCode Conv_I2
static readonly OpCode Or
static readonly OpCode Sub_Ovf
static readonly OpCode Stloc
static readonly OpCode Bgt_Un
static readonly OpCode Conv_Ovf_U1
static readonly OpCode Constrained
static readonly OpCode Newobj
static readonly OpCode Bgt
static readonly OpCode Cgt
static readonly OpCode Conv_I1
static readonly OpCode Add
static readonly OpCode Beq
static readonly OpCode And
static readonly OpCode Br
static readonly OpCode Shl
static readonly OpCode Initobj
static readonly OpCode Conv_U1
static readonly OpCode Bne_Un
static readonly OpCode Mul_Ovf
static readonly OpCode Ceq
static readonly OpCode Ldfld
static readonly OpCode Shr
static readonly OpCode Ldc_I4_1
static readonly OpCode Sub
static readonly OpCode Ldc_I4_0
static readonly OpCode Isinst
static readonly OpCode Throw
static readonly OpCode Brtrue_S
static readonly OpCode Pop
static readonly OpCode Conv_U2
static readonly OpCode Ldelema
static readonly OpCode Switch
static readonly OpCode Shr_Un
static readonly OpCode Call
static readonly OpCode Ret
static readonly OpCode Ldloc
static readonly OpCode Ldnull
static readonly OpCode Brfalse_S
static readonly OpCode Ldc_R4
static readonly OpCode Box
static readonly OpCode Neg
static readonly OpCode Not
static readonly OpCode Div
static readonly OpCode Ldc_R8
static readonly OpCode Xor
static readonly OpCode Add_Ovf
static readonly OpCode Dup
static readonly OpCode Stfld
static readonly OpCode Rethrow
static readonly OpCode Conv_I8
static readonly OpCode Sub_Ovf_Un
static readonly OpCode Ldlen
static readonly OpCode Cgt_Un
virtual Delegate CreateDelegate(Type delegateType)
MethodInfo? GetGetMethod()
MethodInfo? GetSetMethod()
static int Increment(ref int location)
static ? Type GetType(string typeName, bool throwOnError, bool ignoreCase)
static TypeCode GetTypeCode(Type? type)