dcsimg
September 19, 2018
Hot Topics:

.NET Tip: Creating a Read-Only List

  • October 16, 2008
  • By Jay Miller
  • Send Email »
  • More Articles »

Have you ever had the need to expose a read-only list? I'm not just talking about a List<T> property that could not be set directly, but one that could not have any elements added, removed, or modified? There is a simple way to do this by using the AsReadOnly() method of a List<T>. Here is an example class that uses a List<string> to store the names of the authors of Design Patterns.

public class Patterns
{
   List<string><string> _GangOfFourAuthors =
      new List<string> { "Gamma", "Helm", "Johnson", "Vlissides" };

   public IList<string><string> GangOfFourAuthors
   {
      get { return _GangOfFourAuthors.AsReadOnly(); }
   }

   public void AddMe()
   {
      _GangOfFourAuthors.Add("Miller");
   }
}

A List<string> is created and initialized with the names of the authors. The GangOfFourAuthors property returns a read-only IList<string>. Look at a quick example of using the class and property to print the names of the authors to the Output window.

Patterns p = new Patterns();
IList<string> Authors = p.GangOfFourAuthors;

foreach (string a in Authors)
    Debug.WriteLine(a);

Output:
Gamma
Helm
Johnson
Vlissides

This code creates a new Patterns object, retrieves the list of authors, and then prints them to the Output window. You can see that the output matches the initialization of the List<string> in the Patterns class. At this point, elements of Authors cannot be added, removed, or modified. The following code would throw an error:

Authors.Add("Miller"); 

Authors cannot be changed in any way without causing an error. The original list, however, can be modified and those changes will be reflected in the read-only version of the list. If you look at the AddMe() method in the Patterns class above, you will see that it adds an element to the internal List<string> of authors. Here is code that calls that method and then outputs the list of authors.

Patterns p = new Patterns();
IList<string> Authors = p.GangOfFourAuthors;

p.AddMe();

foreach (string a in Authors)
   Debug.WriteLine(a);

Output:
Gamma
Helm
Johnson
Vlissides
Miller

The AsReadOnly() method provides an easy way to restrict access to your classes' data. The method is available for List<T> as well as arrays.

About the Author

Jay Miller is a Software Engineer with Electronic Tracking Systems, a company dedicated to robbery prevention, apprehension, and recovery based in Carrollton, Texas. Jay has been working with .NET since the release of the first beta and is co-author of Learn Microsoft Visual Basic.Net In a Weekend. Jay can be reached via email at jmiller@sm-ets.com.






Comment and Contribute

 


(Maximum characters: 1200). You have characters left.

 

 


Enterprise Development Update

Don't miss an article. Subscribe to our newsletter below.

By submitting your information, you agree that developer.com may send you developer offers via email, phone and text message, as well as email offers about other products and services that developer believes may be of interest to you. developer will process your information in accordance with the Quinstreet Privacy Policy.

Sitemap

Thanks for your registration, follow us on our social networks to keep up-to-date