This bug is about a mismatch between what behaviour is expected (on a functional level) and the actual behavior. There are different scenario's:
int index = myRadGridView.Rows.Add(1, 2, 3);
Actual and expected behavior
Adds a row to the grid, filling cells with the values 1, 2 and 3. Even when there are more columns than values, only the first 3 cells are filled.
int index = myRadGridView.Rows.Add(); // Will result in: myRadGridView.Rows.Add(new object[0]);
Actual behavior
IndexOutOfRangeException is thrown.
Expected behavior
A new row is added, the cells are not filled with anything, since it should not matter if 3, 4 or zero values are added to the cells. Or, if you are very strict, an ArgumentOutOfRangeException, telling us at least 1 value is required.
Remark
Of course there is also a NewRow() method. But that is no reason Add() should not be allowed to accept zero values.
int index = myRadGridView.Rows.Add((object[])null);
Actual behavior
A NullReferenceException is thrown.
Expected behavior
ArgumentNullException, telling us that parameter "values" is not allowed to be null.
int index = myRadGridView.Rows.Add(new GridViewDataRowInfo(...), new GridViewDataRowInfo(...));
// or
int index = myRadGridView.Rows.Add(new object[] { new GridViewDataRowInfo(...), new GridViewDataRowInfo(...) });
Actual behavior
Only the first row is added. The second row, or even the second value (integer, string, whatever) is totally ignored.
Expected behavior
Remark
The method Add(params object[] values) checks if the first value is a row, resulting in this and the previous bugs.