Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CheckValue()

object System.RuntimeType.CheckValue ( object value,
Binder binder,
CultureInfo culture,
BindingFlags invokeAttr )
inlinepackage

Definition at line 2997 of file RuntimeType.cs.

2998 {
3000 {
3001 Type type = value.GetType();
3002 if ((object)type != this && RuntimeTypeHandle.IsValueType(this))
3003 {
3005 }
3006 return value;
3007 }
3008 if (base.IsByRef)
3009 {
3010 RuntimeType elementType = RuntimeTypeHandle.GetElementType(this);
3011 if (elementType.IsInstanceOfType(value) || value == null)
3012 {
3014 }
3015 }
3016 else
3017 {
3018 if (value == null)
3019 {
3020 return value;
3021 }
3022 if (this == s_typedRef)
3023 {
3024 return value;
3025 }
3026 }
3027 bool flag = base.IsPointer || IsEnum || base.IsPrimitive;
3028 if (flag)
3029 {
3031 RuntimeType valueType = ((pointer == null) ? ((RuntimeType)value.GetType()) : ((RuntimeType)pointer.GetPointerType()));
3032 if (CanValueSpecialCast(valueType, this))
3033 {
3034 if (pointer != null)
3035 {
3036 return pointer.GetPointerValue();
3037 }
3038 return value;
3039 }
3040 }
3041 if ((invokeAttr & BindingFlags.ExactBinding) == BindingFlags.ExactBinding)
3042 {
3043 throw new ArgumentException(SR.Format(SR.Arg_ObjObjEx, value.GetType(), this));
3044 }
3045 return TryChangeType(value, binder, culture, flag);
3046 }
static bool CanValueSpecialCast(RuntimeType valueType, RuntimeType targetType)
override bool IsInstanceOfType([NotNullWhen(true)] object o)
static object AllocateValueType(RuntimeType type, object value, bool fForceTypeChange)
static readonly RuntimeType s_typedRef
object TryChangeType(object value, Binder binder, CultureInfo culture, bool needsSpecialCast)
virtual bool IsEnum
Definition Type.cs:227

References System.RuntimeType.RuntimeType(), System.RuntimeType.AllocateValueType(), System.SR.Arg_ObjObjEx, System.RuntimeType.CanValueSpecialCast(), System.culture, System.elementType, System.SR.Format(), System.RuntimeTypeHandle.GetElementType(), System.Type.GetType(), System.Type.IsEnum, System.RuntimeType.IsInstanceOfType(), System.RuntimeTypeHandle.IsValueType(), System.pointer, System.RuntimeType.s_typedRef, System.RuntimeType.TryChangeType(), System.type, and System.value.

Referenced by System.Reflection.MethodBase.CheckArguments(), and System.Reflection.RtFieldInfo.SetValue().