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

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;...

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 ...

Containers in c++

SEQUENTIAL CONTAINER Vector (Dynamic Array - Contiguous memory):  O(1): Vectors provide fast (constant time) element insertion and deletion at the end of the vector and Acess. O(n): Slow (linear time) insertion and deletion anywhere else. Insertion and deletion are slow because the operation must move all the elements “down” or “up” by one to make room for the new element or to fill the space left by the deleted element. Like arrays, vectors provide fast (constant time) access to any of their elements. List (Doubly Linked List - Not  Contiguous memory ): O(n): Lists provide slow (linear time) element lookup and access, O(1):  (constant time) insertion and deletion of elements once the relevant position has been found Deque (Doubly Ended Queue - Not Contiguous memory): O(1): (constant time) element access. Like a list, it provides fast (amortized constant time) insertion and deletion at both ends of the sequence. O(1):  (lin...