protected virtual void UnboxIfNecessary(Type sourceType, Type destinationType) { if (!sourceType.IsValueType && destinationType.IsValueType) { ilGenerator.Emit(OpCodes.Unbox, destinationType); ilGenerator.Emit(OpCodes.Ldobj, destinationType); } }