Когда вы делаете:
DataGridViewRow drFirst = new DataGridViewRow();
значение индекса этой строки равно -1 в объекте drFirst.но когда вы добавляете его в коллекцию строк, например:
DataGridViewRow drFirst = new DataGridViewRow();
, коллекция строк дает ему новый индекс в зависимости от количества строк, уже существующих в коллекции.В вашем случае индекс = 0 здесь.
Аналогично для drSecond значение индекса равно -1, когда вы его создаете, но когда вы добавляете его в коллекцию строк, значение индекса изменяется на 1.
поэтому строка:
bool thisSeemsWrong = object.ReferenceEquals(dgv.Rows[dgv.Rows.Count - 1], drSecond);
сравнивает два объекта с разными значениями индекса, поэтому они будут разными, поэтому возвращает false.но эта строка:
bool thisSeemsRight = object.ReferenceEquals(dgv.Rows[dgv.Rows.Count - 1].Tag, drSecond.Tag);
просто сравнивает свойство Tag, которое не было изменено и возвращает true.
[ОБНОВЛЕНИЕ]
DataGridViewRow drFirst = new DataGridViewRow();
//dgv.Rows.Add(drFirst); //if you comment this line then the thisSeemsWrong is true that's right because it's now comparing the row you add which is drSecond with drSecond
DataGridViewRow drSecond = new DataGridViewRow();
drSecond.Tag = new object();
dgv.Rows.Add(drSecond);
// When drFirst is added this is false - when it isn't this is true (as it should always be?)
bool thisSeemsWrong = object.ReferenceEquals(dgv.Rows[dgv.Rows.Count - 1], drSecond);
DataGridViewRow drFirst = new DataGridViewRow();
dgv.Rows.Add(drFirst); // Now because you have added the first row as drFirst, look what you are comparing against in thisSeemsWrong, you are comparing Row[0] which is drFirst with drSecond which will always be false. You either have to compare Row[1] with drSecond or Row[0] with drFirst??
DataGridViewRow drSecond = new DataGridViewRow();
drSecond.Tag = new object();
dgv.Rows.Add(drSecond);
// When drFirst is added this is false - when it isn't this is true (as it should always be?)
bool thisSeemsWrong = object.ReferenceEquals(dgv.Rows[dgv.Rows.Count - 1], drSecond);