public override void AppendCompareTo(ILProcessor ilProcessor, ParameterDefinition parameterDefinition)
        {
            ilProcessor.Append(Instruction.Create(OpCodes.Ldarg_0));
            ilProcessor.Append(_thisField.ContainsGenericParameter
                ? Instruction.Create(OpCodes.Ldflda, GetGenericFieldReference())
                : Instruction.Create(OpCodes.Ldfld, GetGenericFieldReference()));

            if (MemberTypeDefinition.IsStruct)
            {
                ilProcessor.Append(Instruction.Create(OpCodes.Stloc_S, LocalVariable));
                ilProcessor.Append(Instruction.Create(OpCodes.Ldloca_S, LocalVariable));
            }
            ilProcessor.Append(Instruction.Create(OpCodes.Ldarg_1));
            ilProcessor.Append(Instruction.Create(OpCodes.Ldfld, GetGenericFieldReference()));

            if (MemberTypeDefinition.IsStruct &&
                CompareTo.ByObject())
            {
                ilProcessor.Append(MemberTypeDefinition.Box());
            }

            if (_thisField.ContainsGenericParameter)
            {
                ilProcessor.Append(MemberTypeDefinition.Box());
                ilProcessor.Append(MemberTypeDefinition.Constrained());
            }

            ilProcessor.Append(MemberTypeDefinition.IsStruct
                ? Instruction.Create(OpCodes.Call, CompareTo)
                : Instruction.Create(OpCodes.Callvirt, CompareTo));
        }
        public override void AppendCompareTo(ILProcessor ilProcessor, ParameterDefinition parameterDefinition)
        {
            ilProcessor.Append(Instruction.Create(OpCodes.Ldarg_0));
            ilProcessor.Append(Instruction.Create(OpCodes.Call, _thisProperty.GetMethod.GetGenericMethodReference()));

            if (_thisProperty.PropertyType.IsGeneric() ||
                MemberTypeDefinition.IsStruct)
            {
                ilProcessor.Append(Instruction.Create(OpCodes.Stloc_S, LocalVariable));
                ilProcessor.Append(Instruction.Create(OpCodes.Ldloca_S, LocalVariable));
            }

            if (_thisProperty.DeclaringType.IsStruct())
            {
                ilProcessor.Append(Instruction.Create(OpCodes.Ldarga_S, parameterDefinition));
                ilProcessor.Append(Instruction.Create(OpCodes.Call, _thisProperty.GetMethod.GetGenericMethodReference()));
            }
            else
            {
                ilProcessor.Append(Instruction.Create(OpCodes.Ldarg_1));
                ilProcessor.Append(Instruction.Create(OpCodes.Callvirt, _thisProperty.GetMethod.GetGenericMethodReference()));
            }

            if (MemberTypeDefinition.IsStruct &&
                CompareTo.ByObject())
            {
                ilProcessor.Append(MemberTypeDefinition.Box());
            }

            if (_thisProperty.PropertyType.IsGeneric())
            {
                ilProcessor.Append(MemberTypeDefinition.Box());
                ilProcessor.Append(MemberTypeDefinition.Constrained());
            }

            ilProcessor.Append(MemberTypeDefinition.IsStruct
                ? Instruction.Create(OpCodes.Call, CompareTo)
                : Instruction.Create(OpCodes.Callvirt, CompareTo));
        }