Using params keyword

Let’s say you have a class and you want to store a collection of strings in that class. How would your method look like which would let you add a string to the class?

    1: public class SampleClass
    2:  {
    3:      private List<string> myList = null; 
    4:  
    5:      public SampleClass()
    6:      {
    7:          myList = new List<string>(); 
    8:      }
    9:  }

There are a couple of ways you could write the method; it also depends on what are you trying to achieve. Below are some of the samples how you could do this (yes, I know, there are probably million other ways to do this :)):

    1: public void AddItem(string item)
    2: {
    3:     // Do something 
    4: }
    5:  
    6: public void AddItems(List<string> items)
    7: { 
    8:     // Do something 
    9: }
   10:  
   11: public void AddItems (string [] items) 
   12: {
   13:     // Do something 
   14: }

Every method above has it’s benefits and drawbacks – I have to pass in an array of string, I can only pass in one string a the time, sometimes I want to pass in 3 strings and sometimes 1 – why can’t I use one method only?).

There’s a keyword called “params” you could use to solve this problem – with this keyword you can pass in as many parameters as you like; for example all calls below are made to the same method:

    1: SampleClass my = new SampleClass();
    2: my.AddItems("One"); 
    3: my.AddItems("One", "Two");
    4: my.AddItems("One", "Two", "Three"); 

And here’s how the method would look like:

    1: public void AddItems(params string[] items)
    2: {
    3:     foreach (string item in items)
    4:     { 
    5:         // Do something
    6:     }
    7: }