Вы можете попробовать что-то вроде этого
list.Sort((x, y) =>
{
if (x.Id == 0)
{
return -1;
}
if (y.Id == 0)
{
return 1;
}
return x.Group.Name.CompareTo(y.Group.Name);
});
Где список List<T>
.
Этот метод использует опцию пользовательской сортировки, предоставленную List<T>
, используя Comparison<T>
делегат.
В основном, что делает этот метод, он просто добавляет особое условие для сравнения, когда Id
. Если он равен нулю, он вернет значение, указывающее, что объект меньше, что заставляет объект входить в верхнюю часть списка. Если нет, он сортирует объект, используя его свойство Group.Name
в порядке возрастания.
-g говорит компилятору хранить информацию таблицы символов в исполняемом файле. Среди прочего это включает:
, Отладчики используют эту информацию, чтобы произвести понятные имена для символов и связать инструкции с конкретными строками в источнике.
Для некоторых компиляторов, предоставляя-g отключит определенную оптимизацию. Например, ICC устанавливает уровень оптимизации по умолчанию на-O0 с-g, если Вы явно не указываете на-O[123]. Кроме того, даже при предоставлении-O[123] будет все еще отключена оптимизация, которая предотвращает трассировку стека (например, разделяющий указатели кадра от стековых фреймов. Это имеет только незначительный эффект на производительность).
С некоторыми компиляторами,-g отключит оптимизацию, которая может перепутать, куда символы прибыли из (переупорядочение инструкции, развертывание цикла, встроив и т.д.). Если Вы хотите отладить с оптимизацией, можно использовать-g3 с gcc для обхождения части этого. Дополнительная информация об отладке будет включена о макросах, расширениях и функциях, которые, возможно, были встроены. Это может позволить отладчикам и инструментам производительности отображать оптимизированный код на первоисточник, но это - максимальные усилия. Некоторая оптимизация действительно искажает код.
Для большего количества информации, смотрите на КАРЛИК , формат отладки, первоначально разработанный для соглашений с ELF (двоичный формат для Linux и другая ОС).
Таблица символов добавляется к исполняемому файлу, который отображает функцию/имена переменной на местоположения данных, так, чтобы отладчики могли сообщить значимая информация, а не просто указатели. Это не производит скорость Вашей программы, и можно удалить таблицу символов с командой 'полосы'.
В дополнение к отладке и информации о символе
Google DWARF (Шутка Разработчика над ELF)
По умолчанию выключена большая часть оптимизации компилятора, когда отладка включена.
, Таким образом, код является чистым переводом источника в Машинный код, а не результат многих узкоспециализированных преобразований, которые применяются для выпуска двоичных файлов.
, Но наиболее важное различие (по-моему)
Память в сборках Отладки обычно инициализируется к некоторому компилятору определенные значения для упрощения отладки. В сборках конечных версий память не инициализируется, если явно не сделано так кодом приложения.
Проверка Ваша документация компилятора для получения дополнительной информации:
, Но пример для DevStudio:
- 0xCDCDCDCD, Выделенный в "куче", но не инициализированный
- , 0xDDDDDDDD Освободил память "кучи".
- заборы 0xFDFDFDFD "NoMansLand", автоматически помещенные в границу памяти "кучи". Никогда не должен перезаписываться. Если Вы действительно перезаписываете один, Вы, вероятно, уходите от конца массива.
- 0xCCCCCCCC, Выделенный на стеке, но не инициализированный
-g добавляет отладочную информацию в исполняемом файле, таком как названия переменных, названия функций и номера строки. Это позволяет отладчику, такому как gdb ступать через строку кода с методической точностью, устанавливать точки останова и осматривать значения переменных. Из-за этой дополнительной информации с помощью-g увеличивает размер исполняемого файла.
кроме того, gcc позволяет использовать-g вместе с флагами-O, которые включают оптимизацию. Отладка оптимизированного исполняемого файла может быть очень хитрой, потому что переменные могут быть оптимизированы далеко, или инструкции могут быть выполнены в другом порядке. Обычно это - хорошая идея выключить оптимизацию при использовании-g, даже при том, что это приводит к намного более медленному коду.
Так же, как вопрос, представляющий интерес можно взломать hexeditor и смотреть на исполняемый файл, произведенный с -g
и один без. Вы видите символы и вещи, которые добавляются. Это может изменить блок (-S
) также, но я не уверен.
Некоторые операционные системы (как z/OS) производят "файл стороны", который содержит отладочные символы. Это помогает постараться не чрезмерно увеличивать размер исполняемого файла с дополнительной информацией.
Существует некоторое перекрытие с этим вопрос , который охватывает проблему с другой стороны.