2015-04-14 2 views
0

Хорошо, поэтому я беру все, что я узнал, и пытаюсь реализовать его на C#. Учитывая, что у меня есть опыт работы в Java, моя поездка была довольно гладкой до сих пор, но я сталкиваюсь с проблемами в использовании объекта и функций Comparer и т. Д. Меня не интересует прямая реализация/перевод, но я хочу знать, как C# сравнивает два общих значения. Что он использует для сортировки? Hashcode, или, может быть, какая-то методология на C#?Компаратор/Сортировка/Эквивалентная методология и возвращаемое значение

Чтобы просто уточнить, я знаю, как сортировать, искать и т. Д., Используя методы в C#. Я хочу знать, что происходит под капотом - какие функции Comparer и другие функции используют для сравнения двух значений дженериков?

+0

'INT CompareTo (объект другой)': https://msdn.microsoft.com/en-us/library/system.icomparable%28v=vs.110%29.aspx – Mephy

+1

Вы используете "общий" как общий термин для «объекта» или использование «generic» как термин для «C# generics»? :) Некоторый пример кода, который показывает, что вы пытаетесь понять, может помочь. (Редактирование сообщения также позволяет удалить текст «история вашей жизни», который напрямую не связан с проблемой). –

ответ

0

Я хочу знать, как C# сравнивает два обобщенных значения

Это не/не может, поэтому есть интерфейсы ICompariable и IComparer ..

Что Я хочу знать, что происходит под капотом

Если вы говорите о типах предоставляемых Нетто тогда ..

Если у вас есть массив типов (например, строка или целое число), которые уже поддерживают IComparer, вы можете отсортировать этот массив без предоставления явной ссылки на IComparer. В этом случае элементы массива преобразуются в стандартную реализацию IComparer (Comparer.Default) для вас.

How to use the IComparable and IComparer interfaces in Visual C#, вероятно, лучшая статья, которую я видел по вашему вопросу.

Роль IComparable является создание способа сравнения двух объектов определенного типа

Роль IComparer является обеспечение дополнительных механизмов сравнения. Например, вы можете заказать упорядочение своего класса по нескольким полям или свойствам, по возрастанию и убыванию в одном и том же поле или в обоих.

+0

Это все хорошо и хорошо, но я хочу знать, что происходит под капотом. Я знаю, как использовать IComparer/IComparable/различные методы и алгоритмы, и то, что я не знаю, как использовать, я могу легко вычислить. Я предполагаю, что самый простой способ выразить это - я хочу точно видеть, что он делает, когда сравнивает. Лучший способ сделать это, очевидно, увидеть исходный код, но я искажен, если я могу найти исходный код C# в любом месте. – JonMcDev

+0

Ссылка, которую я предоставил, четко указывает, что происходит, в какой-то момент это просто «Обратите внимание, что метод IComparer.Compare требует третичного сравнения. 1, 0 или -1 в зависимости от того, больше ли одно значение, равное или меньшее, чем другое. Порядок сортировки (восходящий или нисходящий) может быть изменен путем переключения логических операторов в этом методе. –

+0

@JonMcDev https://www.bing.com/search?q=microsoft+reference+source –

 Смежные вопросы

  • Нет связанных вопросов^_^