4

Possible Duplicate:
C#: Difference between List<T> and Collection<T> (CA1002, Do not expose generic lists)

The FxCop says in a rule that generic List should not be exposed to the outside world.

But I do not understand why and what is the replacement for the generice List?

Reference : http://msdn.microsoft.com/en-in/library/ms182142%28en-us%29.aspx

Community
  • 1
  • 1
Jey Geethan
  • 2,235
  • 5
  • 33
  • 60

3 Answers3

13

The reason is that the use of a concrete List<T> is meant to be an implementation detail, and you're meant to expose something more abstract, such as IEnumerable<T> or ICollection<T>, that represents only the functionality you want to expose (such as being enumerable, mutable and/or indexable). This gives you flexibility to change the implementation later on.

In practice, this warning is often resolved by returning IList<T> instead of List<T>, but the idea is to prompt you to think about "what functionality do I actually need to guarantee my callers?" E.g. maybe I should be returning IEnumerable<T> or ReadOnlyCollection<T> because I don't want my callers messing with the returned collection.

itowlson
  • 73,686
  • 17
  • 161
  • 157
2

Always expose the lowest base class/interface in the object hierarchy that will be suitable for your scenario. For example if consumers of this property are going to only iterate over it use IEnumerable(Of T). By exposing a List<T> you are breaking encapsulation by giving client code access to an implementation detail of your class.

Darin Dimitrov
  • 1,023,142
  • 271
  • 3,287
  • 2,928
1

A generic list is a .NET construct, however web services are often intended to be interoperable with other frameworks.

Chris Fulstow
  • 41,170
  • 10
  • 86
  • 110