Попытка использовать Visual Studio лучше!Как мне найти помощь по методу сортировки? - PullRequest
4 голосов
/ 07 сентября 2011

Я читаю книгу, и она дает пример метода сортировки вместе с лямбда-запросом.

Примером является {Product.Sort( (x,y) => x.Name.CompareTo(y.Name) );

Это действительно заняло у меня некоторое время, чтобы понятьпоскольку я не понимал, как .Sort имел дело с двумя входами лямбды.

Я попытался нажать Sort и нажать F1 для получения помощи, но ничего не дало, это имело для меня смысл .

Возможно, я просто недостаточно хорош, чтобы понять эти примеры, но я просто не мог понять, как это работает, пока я не изменил лямбду на x,y,z который дал ошибку Error Delegate 'System.Comparison<ConsoleApplication1.Product>' does not take 3 arguments

Что имело для меня гораздо больше смысла ... В любом случае, после некоторого осмотра я уверен, что понимаю метод Сортировки, но мне потребовалосьнамного дольше, чем я доволен.

От людей, которые намного лучше меня - учитывая ситуацию, подобную этой, как бы вы искали помощь?

Набрав Shift + Пробел Я также смог произвести следующиеlowing:

enter image description here

Однако мне, как ученику C #, просто интересно, как я могу объяснить это требованием лямбды с двумя входами?

Ответы [ 5 ]

5 голосов
/ 07 сентября 2011

Это не требует лямбда.Требуется только делегат типа Comparison.Например, может существовать метод:

int CompareProductNames(Product x, Product y)
{
    return x.Name.CompareTo(y.Name);
}

, а затем можно вызвать Sort следующим образом:

productList.Sort(CompareProductNames);

Comparison<T> - это делегат, который принимает два параметра типаT и возвращает int.

1 голос
/ 07 сентября 2011

Звучит так, будто вам не нужно объяснение того, что происходит, а как выяснить это. Наведите указатель мыши на часть Sort, и вы увидите, что вызывается определенная перегрузка. В этом случае его Sort(Comparison<Product>)), который соответствует Sort(Comparison(T))

1 голос
/ 07 сентября 2011

Один из подходов - проверить документацию Сравнение . Это делегат , например указатель на функцию, которая принимает два аргумента типа T и возвращает целочисленное значение. Тип T объявляется в методе Sort<T> класса List<T>, поэтому здесь T является Product. Лямбда-выражения - это просто ярлык для этой функции.
Главное, чтобы понять, что этот код является просто эквивалентом:

    public void DoSort()
    {
        list.Sort(Compare); //Pass method as a Comparison<Product>
    }

    public int Compare(Product x, Product y)
    {
        return x.Name.CompareTo(y.Name);
    }
0 голосов
/ 07 сентября 2011

Может быть проще понять документ MSDN, который подходит к F1, если вы знаете, что лямбда-выражение оценивается как одно значение делегата.Документ MSDN показывает две перегрузки для сортировки с одним аргументом;щелкнув по типу аргумента, вы увидите, что Сравнение - это делегат, принимающий два аргумента.

Вам нужно выполнить несколько шагов в документе MSDN, чтобы найти информацию, которую вы ищете.

0 голосов
/ 07 сентября 2011

Посмотрите List<T>.Sort в Google, а затем Google, это аргументы, если вы не понимаете.Именно так работает большинство разработчиков в наши дни.

Я, например, не смог бы написать код без помощи Google и сайтов вроде SO.

Кроме того, вы должны понимать, как работают делегаты, в случае сортировки, поскольку лямбда - это действительно анонимный метод, который передается делегату.Входные данные перехвачены лямбда-аргументами для делегата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...