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
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
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.
A generic list is a .NET construct, however web services are often intended to be interoperable with other frameworks.
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.