Skip to main content

indexers :: Advance : C# programming for c++ programmers

1. Where are indexers used in .NET :

To store or retrieve data from session state or application state variables, we make use indexers.

Session["sessiondata"] = "sessiondata";


2. Defination :
An indexer allows an object to be indexed such as an array

Syntax :

A one or multi param indexer has the following syntax:

element-type this[int index, ..]
{
   // The get accessor.
   get
   {
      // return the value specified by index
   }
   
   // The set accessor.
   set
   {
      // set the value specified by index
   }
}



Points to remember:
1. We then created an indexer using "this" keyword. This indexer takes employeeId as parameter and returns employee name.
public string this[int employeeId]
2. Just like properties indexers have get and set accessors.
3. Indexers can also be overloaded. 


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Demo
{
    public class Employee
    {
        public int EmpId { get; set; }
        public string Name { get; set; }
    }

    public class Orgnization
    {
        private List lEmployees;

        public Orgnization()
        {
            lEmployees = new List();

            lEmployees.Add(new Employee { EmpId = 101, Name = "iliyas"});
            lEmployees.Add(new Employee { EmpId = 102, Name = "patel"});
            lEmployees.Add(new Employee { EmpId = 103, Name = "kabir"});
            
        }

        
        public string this[int empId]
        {
            
            get
            {
                return lEmployees.FirstOrDefault(emp => emp.EmpId  == empId).Name;
            }
            set
            {
                lEmployees.FirstOrDefault(emp => emp.EmpId  == empId).Name = value;
            }
        }
    }
}




Using indexer:

Orgnization org = new Orgnization();
console.writeline(org[0]);
console.writeline(org[1]);
console.writeline(org[2]);


org[2] = "Name of employee updated here ";



3. Overloaded Indexers :
Indexers can be overloaded.

Example:

namespace Demo
{
    public class Employee
    {
        public int EmpId { get; set; }
        public string Name { get; set; }
public string Salarycode { get; set; }
    }

    public class Orgnization
    {
        private List lEmployees;

        public Orgnization()
        {
            lEmployees = new List();

            lEmployees.Add(new Employee { EmpId = 101, Name = "iliyas", Salarycode = "MP012"});
            lEmployees.Add(new Employee { EmpId = 102, Name = "patel" , Salarycode = "MP032"});
            lEmployees.Add(new Employee { EmpId = 103, Name = "kabir" , Salarycode = "MP022"});
            
        }

        
        public string this[string SaCode]
        {
            
            get
            {
                return lEmployees.FirstOrDefault(emp => emp.Salarycode  == SaCode).Name;
            }
            set
            {
                lEmployees.FirstOrDefault(emp => emp.Salarycode  == SaCode).Name = value;
            }
        }


    }
}



Using indexer:

Orgnization org = new Orgnization();
console.writeline(org["MP012"]);
console.writeline(org["MP032"]);
console.writeline(org["MP022"]);


org[2] = "sal updated here ";

Comments

Popular posts from this blog

const used with functions

const used with functions : class Dog {    int age;    string name; public:    Dog() { age = 3; name = "dummy"; }         // const parameters and these are overloaded functions    void setAge(const int& a) { age = a; }    void setAge(int& a) { age = a; }         // Const return value    const string& getName() {return name;}         // const function and these are overloaded functions    void printDogName() const { cout << name << "const" << endl; }  // value of name can't be modified    void printDogName() { cout << getName() << " non-const" << endl; } }; int main() {    Dog d;    d.printDogName();        const Dog d2;    d2.printDogName();     }

Structured Bindings

Returning multiple Values from function C++ 11 vs C++ 17 Returning compound objects Iterating over a compound collection Direct initialization Returning multiple Values from function C++ 11 vs C++ 17 :  C++ 11 (std::tie): std::tuple mytuple() {     char a = 'a';     int i = 123;     bool b = true;     return std::make_tuple(a, i, b);  // packing variable into tuple } To access return value using C++ 11, we would need something like: char a; int i; bool b; std::tie(a, i, b) = mytuple();  // unpacking tuple into variables Where the variables have to be defined before use and the types known in advance. C++ 17 : auto [a, i, b] = mytuple(); Returning compound objects :  This is the easy way to assign the individual parts of a compound type (such as a struct, pair etc) to different variables all in one go – and have the correct types automatically assigned. So let’s have a look at an ...

Part1 : STL Algorithms (Non-Modifying sequence) in c++

Non-Modifying sequence operations : 1.  Non-modifying sequence operations:   _of (CPP 11) std::array all_of_elem = { 3,5,7,11,13,17,19,23 }; 1. if ( std::all_of ( all_of_elem.begin(),   all_of_elem.end() ,  [](int i) {return i % 2; } )) std::cout << "All the elements are odd numbers.\n"; std::array any_of_elem = { 0,1,-1,3,-3,5,-5 }; 2. if ( std::any_of ( any_of_elem.begin() ,  any_of_elem.end() ,  [](int i) {return i )) std::cout << "There are negative elements in the range.\n"; std::array foo = { 1,2,4,8,16,32,64,128 }; 3. if ( std::none_of ( foo.begin() ,  foo.end() ,  [](int i) {return i )) std::cout << "There are no negative elements in the range.\n"; 2.  Non-modifying sequence operations:   find       std::string myints[] = { "Hello", "Hi", "Bye", "ByeBye" }; std::vector myvector(myints, myints + 4); std::vector ::iterator it;...