System.Xml.Serialization.CodeGenerator.InternalConvert C# (CSharp) Method

InternalConvert() private method

private InternalConvert ( Type source, Type target, bool isAddress ) : void
source Type
target Type
isAddress bool
return void
        private void InternalConvert(Type source, Type target, bool isAddress)
        {
            if (target == source)
                return;
            if (target.GetTypeInfo().IsValueType)
            {
                if (source.GetTypeInfo().IsValueType)
                {
                    OpCode opCode = GetConvOpCode(target.GetTypeCode());
                    if (opCode.Equals(OpCodes.Nop))
                    {
                        throw new CodeGeneratorConversionException(source, target, isAddress, "NoConversionPossibleTo");
                    }
                    else
                    {
                        _ilGen.Emit(opCode);
                    }
                }
                else if (source.IsAssignableFrom(target))
                {
                    Unbox(target);
                    if (!isAddress)
                        Ldobj(target);
                }
                else
                {
                    throw new CodeGeneratorConversionException(source, target, isAddress, "IsNotAssignableFrom");
                }
            }
            else if (target.IsAssignableFrom(source))
            {
                if (source.GetTypeInfo().IsValueType)
                {
                    if (isAddress)
                        Ldobj(source);
                    Box(source);
                }
            }
            else if (source.IsAssignableFrom(target))
            {
                Castclass(target);
            }
            else if (target.GetTypeInfo().IsInterface || source.GetTypeInfo().IsInterface)
            {
                Castclass(target);
            }
            else
            {
                throw new CodeGeneratorConversionException(source, target, isAddress, "IsNotAssignableFrom");
            }
        }