Помогите перевести кусок кода с C++ на C#

Перевел всю программу, за исключением этого куска и не могу корректно его реализовать Реализация на C++

std::vector<std::pair<long long, int>> r;

sort(r.begin(), r.end(), [](const pair<long long, int>& a, const pair<long long, int>& b) {
    if (a.first == b.first) return a.second < b.second;
    return a.first < b.first;
});

Есть люди которые идут через коридор. Коридор состоит из комнат и дверей "_" - комната "|" - дверь. Если людей более одного, то между первым и последним человеком не должно быть более одной комнаты. Все операции с дверями записываются в бортовой журнал. Открытие двери записывается в виде "о#", а закрытие - в виде "з#", где # это порядковый номер двери в коридоре считая с начала коридора. Нумерация дверей начинается с единицы. Записи в журнале ведутся в одну строку и разделяются пробелами.
Sample Input:
_|_
1
Sample Output:
о1


Ответы (1 шт):

Автор решения: 110010100

Для сортировки наборов сложных объектов применяется интерфейс IComparable.
Метод CompareTo предназначен для сравнения текущего объекта с объектом, который передается в качестве параметра object o. На выходе он возвращает целое число, которое может иметь одно из трех значений:

  1. Меньше нуля. Значит, текущий объект должен находиться перед объектом, который передается в качестве параметра

  2. Равен нулю. Значит, оба объекта равны

  3. Больше нуля. Значит, текущий объект должен находиться после объекта, передаваемого в качестве параметра

    https://metanit.com/sharp/tutorial/3.23.php

→ Ссылка