Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resharper says I shouldn't use List<T>

I have a method:

static void FileChangesDetected(List<ChangedFiles> files) 

I used Visual Studio 2010 and Resharper. Resharper always recommends that I change the List<T> to IEnumerable<T>, and I'm wondering why this is.

In the method, I simply do this:

 foreach (var file in files)  { ... } 

Is there a benefit of using IEnumerable<T> rather than List<T>?

like image 576
Craig Avatar asked May 28 '11 07:05

Craig


2 Answers

It all has to do with LSP (Liskov substitution principle).

Basically, instead of using implementations, it is better to code to abstractions.

In this specific case, if all you do is loop over the list, you can use IEnumerable<T> as the simplest abstraction - this way you don't have to use a List<T>, but any collection type in your function.

This allows your functions to be more reusable and reduces coupling.

like image 106
Oded Avatar answered Sep 23 '22 06:09

Oded


Resharper suggests that your method doesn't need really require List<T> as a parameter and can easily work with IEnumerable<T>. Which means that you can make you method more generic.

like image 39
Alex Aza Avatar answered Sep 23 '22 06:09

Alex Aza