Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

C# C# Streams and Data Processing Serialization Top Ten Scorers

Aaron Selonke
Aaron Selonke
10,323 Points

iComparible vs iComparer vs Linq

Hi there, I was pretty much a blank slate to the iComparer used in the video. After Checking out documentation and youtube videos for an hour I came to two hypothesis.

1) I tried to do this with the iComparable method first, and it was impossible because the PointsPerGame is a floating point variable. Can we get the same result with iComparable?

2) iComparer(and iComparable) are obsolete because we can call linq expressions on Lists (this is possible becuase List<t> implements the iEnumerable class).
Do I have that right?

Here is the solution (that I got from notes I took on an earlier Carling course)

public static List<Player> GetTopTenPlayers(List<Player> players)
            var _Players = players.OrderByDescending(a => a.PointsPerGame).Take(10).ToList();
            return _Players;

1 Answer

Steven Parker
Steven Parker
229,608 Points
  1. iComparable (or IComparer) can be used with any type of object (including floating point numbers). The restriction is that the result of the comparison function must be an integer. The video shows a good example of an iComparer being constructed that compares two Player objects. But it returns integer results.
  2. LINQ does not make iComparable (or IComparer) obsolete, but it does offer additional choices of ways to accomplish certain tasks (such as your sort solution).
Aaron Selonke
Aaron Selonke
10,323 Points

The PointsPerGame property on the Player class is a type double. The values for the different players all have decimals.
The iComparer seems to be returning double for the PointsPerGame properties for each player.

I kind of butcherd my code and completely removed the Icomparer Interface from the player class, So I won't have anything to paste here.