slash shogdhe
slash shogdhe

Reputation: 4197

What is the need Indexers in C#

Today I've gone through what indexers are, but I am bit confused. Is there really a need for indexers? What are the advantages of using an indexer..... thanks in advance

Upvotes: 0

Views: 3379

Answers (7)

Md Shahriar
Md Shahriar

Reputation: 2736

using System;

/* Here is a simple program. I think this will help you to understand */

namespace Indexers
{

    class Demo
    {
        int[] a = new int[10];


        public int Lengths
        {
            get
            {
                return a.Length;
            }
        }


        public int this[int index]
        {
            get
            {
                return a[index];
            }

            set
            {
                a[index] = value;
            }
        }

    }


    class Program
    {
        static void Main(string[] args)
        {

            Demo d = new Demo();  // Notice here, this is a simple object
                                  //but you can use this like an array

            for (int i = 0; i < d.Lengths; i++)
            {
                d[i] = i;
            }

            for (int i = 0; i < d.Lengths; i++)
            {
                Console.WriteLine(d[i]);
            }

             Console.ReadKey();
        }
    }
}

/*Output: 
0
1
2
3
4
5
6
7
8
9
*/

Upvotes: -1

Oded
Oded

Reputation: 499002

Indexers let you get a reference to an object in a collection without having to traverse the whole collections.

Say you have several thousands of objects, and you need the one before last. Instead of iterating over all of the items in the collection, you simply use the index of the object you want.

Indexers do no have to be integers, so you can use a string, for example, (though you can use any object, so long as the collection supports it) as an indexer - this lets you "name" objects in a collection for later retrieval, also quite useful.

Upvotes: 3

Jon Skeet
Jon Skeet

Reputation: 1500635

I guess the simplest answer is to look at how you'd use (say) List<T> otherwise. Would you rather write:

 string foo = list[10];

or

 string foo = list.Get(10);

Likewise for dictionaries, would you rather use:

 map["foo"] = "bar";

or

 map.Put("foo", "bar");

?

Just like properties, there's no real need for them compared with just named methods following a convention... but they make code easier to understand, in my view - and that's one of the most important things a feature can do.

Upvotes: 7

Spence
Spence

Reputation: 29332

I think zedo got closest to the real reason IMHO that they have added this feature. It's for convenience in the same way that we have properties.

The code is easer to type and easier to read, with a simple abstraction to help you understand.

For instance:

string[] array;
string value = array[0];

List<string> list;
string value = list[0];  //Abstracts the list lookup to a call similar to array.

Dictionary<string, int> map;
int value = map["KeyName"]; //Overloaded with string lookup.

Upvotes: 2

THE DOCTOR
THE DOCTOR

Reputation: 4555

Indexers allow you to reference your class in the same way as an array which is useful when creating a collection class, but giving a class array-like behavior can be useful in other situations as well, such as when dealing with a large file or abstracting a set of finite resources.

Upvotes: 1

erinus
erinus

Reputation: 734

for some reason, use indexer can let you create meaningful index to store or map your data. then you can get it from other side by the meaningful index.

Upvotes: -1

TalentTuner
TalentTuner

Reputation: 17556

yes , they are very use of

you can use indexers to get the indexed object.

Taken from MSDN

Indexers are most frequently implemented in types whose primary purpose is to encapsulate an internal collection or array.

Full Story

Upvotes: 0

Related Questions