I chose to use a while loop because I wanted it to be clear that the loop variables `p` and `a` are being modified in the body of the loop, and because their post-loop values are used later.  Basically I had it down to `for (;<condition>;)` at which point it seemed logical to switch to a while loop.  The loop only modifies `p` once anyway, so I can change to:

```cpp
    int p, a;
    for (p = 0, a = 0; p < parametersInfo->Length && a < suppliedArguments->Length; p++)
    {
        ParameterInfo^ pi = parametersInfo[p];
```