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

◆ TryChangeType()

object System.RuntimeType.TryChangeType ( object value,
Binder binder,
CultureInfo culture,
bool needsSpecialCast )
inlineprivate

Definition at line 3048 of file RuntimeType.cs.

3049 {
3050 if (binder != null && binder != Type.DefaultBinder)
3051 {
3052 value = binder.ChangeType(value, this, culture);
3054 {
3055 return value;
3056 }
3057 if (base.IsByRef)
3058 {
3059 RuntimeType elementType = RuntimeTypeHandle.GetElementType(this);
3060 if (elementType.IsInstanceOfType(value) || value == null)
3061 {
3063 }
3064 }
3065 else if (value == null)
3066 {
3067 return value;
3068 }
3069 if (needsSpecialCast)
3070 {
3072 RuntimeType valueType = ((pointer == null) ? ((RuntimeType)value.GetType()) : ((RuntimeType)pointer.GetPointerType()));
3073 if (CanValueSpecialCast(valueType, this))
3074 {
3075 if (pointer != null)
3076 {
3077 return pointer.GetPointerValue();
3078 }
3079 return value;
3080 }
3081 }
3082 }
3083 throw new ArgumentException(SR.Format(SR.Arg_ObjObjEx, value.GetType(), this));
3084 }
static bool CanValueSpecialCast(RuntimeType valueType, RuntimeType targetType)
override bool IsInstanceOfType([NotNullWhen(true)] object o)
static object AllocateValueType(RuntimeType type, object value, bool fForceTypeChange)

References System.RuntimeType.RuntimeType(), System.RuntimeType.AllocateValueType(), System.SR.Arg_ObjObjEx, System.RuntimeType.CanValueSpecialCast(), System.culture, System.Type.DefaultBinder, System.elementType, System.SR.Format(), System.RuntimeTypeHandle.GetElementType(), System.RuntimeType.IsInstanceOfType(), System.pointer, and System.value.

Referenced by System.RuntimeType.CheckValue().