indexer

Indexers

Indexers allow instances of a class or struct to be indexed just like arrays. Indexers resemble properties except that their accessors take parameters.
class SampleCollection<T>
{
    // Declare an array to store the data elements.
    private T[] arr = new T[100];

    // Define the indexer, which will allow client code
    // to use [] notation on the class instance itself.
    // (See line 2 of code in Main below.)
    public T this[int i]
    {
        get
        {
            // This indexer is very simple, and just returns or sets
            // the corresponding element from the internal array.
            return arr[i];
        }
        set
        {
            arr[i] = value;
        }
    }
}

// This class shows how client code uses the indexer.
class Program
{
    static void Main(string[] args)
    {
        // Declare an instance of the SampleCollection type.
   SampleCollection<string> stringCollection = new SampleCollection<string>();

        // Use [] notation on the type.
        stringCollection[0] = "Hello, World";
        System.Console.WriteLine(stringCollection[0]);
    }
}
// Output:
// Hello, World.


Indexers Overview

  • Indexers enable objects to be indexed in a similar manner to arrays.
  • A get accessor returns a value. A set accessor assigns a value.
  • The this keyword is used to define the indexers.
  • The value keyword is used to define the value being assigned by the set indexer.
  • Indexers do not have to be indexed by an integer value; it is up to you how to define the specific look-up mechanism.
  • Indexers can be overloaded.
  • Indexers can have more than one formal parameter, for example, when accessing a two-dimensional array.

Yield

yield is a contextual keyword used in iterator methods in C#. Basically, it has two use cases:

  • yield return obj; returns the next item in the sequence.
  • yield break; stops returning sequence elements (this happens automatically if control reaches the end of the iterator method body).

 


 

 

 

Leave a Reply