<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FClass%2FIndexer</id>
		<title>Csharp/CSharp Tutorial/Class/Indexer - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FClass%2FIndexer"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/Indexer&amp;action=history"/>
		<updated>2026-04-29T22:54:59Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/Indexer&amp;diff=5663&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/Indexer&amp;diff=5663&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:53Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/Indexer&amp;diff=5664&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/Indexer&amp;diff=5664&amp;oldid=prev"/>
				<updated>2010-05-26T12:16:09Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Creating One-Dimensional Indexers==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A one-dimensional indexer has this general form:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;element-type this[int index] {&lt;br /&gt;
        // The get accessor.&lt;br /&gt;
        get {&lt;br /&gt;
            // return the value specified by index &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // The set accessor.&lt;br /&gt;
        set {&lt;br /&gt;
            // set the value specified by index &lt;br /&gt;
        }&lt;br /&gt;
    }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Define both int and string indexer for a class==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.Collections.Specialized;&lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
  public static void Main()&lt;br /&gt;
  {&lt;br /&gt;
    EmployeeList carLot = new EmployeeList();&lt;br /&gt;
    &lt;br /&gt;
    carLot[&amp;quot;A&amp;quot;] = new Employee(&amp;quot;A&amp;quot;);&lt;br /&gt;
    carLot[&amp;quot;B&amp;quot;] = new Employee(&amp;quot;B&amp;quot;);&lt;br /&gt;
    carLot[&amp;quot;C&amp;quot;] = new Employee(&amp;quot;C&amp;quot;);&lt;br /&gt;
    Employee zippy = carLot[&amp;quot;C&amp;quot;];&lt;br /&gt;
    Console.WriteLine(zippy.Name);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class EmployeeList&lt;br /&gt;
{&lt;br /&gt;
  private ListDictionary carDictionary;&lt;br /&gt;
  &lt;br /&gt;
  public EmployeeList()&lt;br /&gt;
  {&lt;br /&gt;
    carDictionary = new ListDictionary();&lt;br /&gt;
  }&lt;br /&gt;
  // The string indexer.&lt;br /&gt;
  public Employee this[string name]&lt;br /&gt;
  {&lt;br /&gt;
    get { return (Employee)carDictionary[name];}&lt;br /&gt;
    set { carDictionary.Add(name, value);}&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // The int indexer.&lt;br /&gt;
  public Employee this[int item]&lt;br /&gt;
  {&lt;br /&gt;
    get { return (Employee)carDictionary[item];}&lt;br /&gt;
    set { carDictionary.Add(item, value);}&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Employee&lt;br /&gt;
{&lt;br /&gt;
    public string Name = &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
  public Employee(string n)&lt;br /&gt;
  {&lt;br /&gt;
      Name = n;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;C&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Define getter only indexer==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
public class Employee&lt;br /&gt;
{&lt;br /&gt;
  private string firstName;&lt;br /&gt;
  private string lastName;&lt;br /&gt;
  public Employee(string firstName, string lastName)&lt;br /&gt;
  {&lt;br /&gt;
    this.firstName = firstName;&lt;br /&gt;
    this.lastName = lastName;&lt;br /&gt;
  }&lt;br /&gt;
  public string this[int index]&lt;br /&gt;
  {&lt;br /&gt;
    get&lt;br /&gt;
    {&lt;br /&gt;
      switch (index)&lt;br /&gt;
      {&lt;br /&gt;
        case 0:&lt;br /&gt;
          return firstName;&lt;br /&gt;
        case 1:&lt;br /&gt;
          return lastName;&lt;br /&gt;
        default:&lt;br /&gt;
          throw new IndexOutOfRangeException();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
  public static void Main()&lt;br /&gt;
  {&lt;br /&gt;
    Employee myEmployee = new Employee(&amp;quot;T&amp;quot;, &amp;quot;M&amp;quot;);&lt;br /&gt;
    Console.WriteLine(&amp;quot;myEmployee[0] = &amp;quot; + myEmployee[0]);&lt;br /&gt;
    Console.WriteLine(&amp;quot;myEmployee[1] = &amp;quot; + myEmployee[1]);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;myEmployee[0] = T&lt;br /&gt;
myEmployee[1] = M&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Indexer based on 0 or non-zero==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
class MyClass&lt;br /&gt;
{&lt;br /&gt;
   int value0; &lt;br /&gt;
   int value1; &lt;br /&gt;
   public int this[int index] &lt;br /&gt;
   {&lt;br /&gt;
      get&lt;br /&gt;
      {&lt;br /&gt;
         return (0 == index) ? value0 : value1;&lt;br /&gt;
      }&lt;br /&gt;
      set&lt;br /&gt;
      {&lt;br /&gt;
         if (0 == index)&lt;br /&gt;
            value0 = value; &lt;br /&gt;
         else&lt;br /&gt;
            value1 = value; &lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
   static void Main()&lt;br /&gt;
   {&lt;br /&gt;
      MyClass a = new MyClass();&lt;br /&gt;
      Console.WriteLine(&amp;quot;Values -- T0: {0}, T1: {1}&amp;quot;, a[0], a[1]);&lt;br /&gt;
      a[0] = 15;&lt;br /&gt;
      a[1] = 20;&lt;br /&gt;
      Console.WriteLine(&amp;quot;Values -- T0: {0}, T1: {1}&amp;quot;, a[0], a[1]);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Values -- T0: 0, T1: 0&lt;br /&gt;
Values -- T0: 15, T1: 20&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Indexer based on switch statement==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
&lt;br /&gt;
class MyClass&lt;br /&gt;
{&lt;br /&gt;
   public string value0;             &lt;br /&gt;
   public string value1;            &lt;br /&gt;
   public string value2;          &lt;br /&gt;
   &lt;br /&gt;
   public string this[int index] &lt;br /&gt;
   {&lt;br /&gt;
      set &lt;br /&gt;
      {&lt;br /&gt;
         switch (index)&lt;br /&gt;
         {&lt;br /&gt;
            case 0: value0 = value;&lt;br /&gt;
               break;&lt;br /&gt;
            case 1: value1 = value;&lt;br /&gt;
               break;&lt;br /&gt;
            case 2: value2 = value;&lt;br /&gt;
               break;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
      get &lt;br /&gt;
      {&lt;br /&gt;
         switch (index)&lt;br /&gt;
         {&lt;br /&gt;
            case 0: return value0;&lt;br /&gt;
            case 1: return value1;&lt;br /&gt;
            case 2: return value2;&lt;br /&gt;
            default:&lt;br /&gt;
               return &amp;quot;&amp;quot;;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
   static void Main()&lt;br /&gt;
   {&lt;br /&gt;
      MyClass myObject = new MyClass();&lt;br /&gt;
      myObject.value0 = &amp;quot;0&amp;quot;;&lt;br /&gt;
      myObject.value1 = &amp;quot;1&amp;quot;;&lt;br /&gt;
      myObject.value2 = &amp;quot;2&amp;quot;;&lt;br /&gt;
      Console.WriteLine(&amp;quot;{0}, {1}, {2}&amp;quot;, myObject[0], myObject[1], myObject[2]);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;0, 1, 2&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Indexer for generic type==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System.Collections;&lt;br /&gt;
public abstract class Shape&lt;br /&gt;
{&lt;br /&gt;
   public abstract void Draw();&lt;br /&gt;
}&lt;br /&gt;
public class Rectangle : Shape&lt;br /&gt;
{&lt;br /&gt;
   public override void Draw()&lt;br /&gt;
   {&lt;br /&gt;
      System.Console.WriteLine( &amp;quot;Rectangle.Draw&amp;quot; );&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
public class Circle : Shape&lt;br /&gt;
{&lt;br /&gt;
   public override void Draw()&lt;br /&gt;
   {&lt;br /&gt;
      System.Console.WriteLine( &amp;quot;Circle.Draw&amp;quot; );&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
public class ShapeList&lt;br /&gt;
{&lt;br /&gt;
   private ArrayList shapes;&lt;br /&gt;
   public ShapeList()&lt;br /&gt;
   {&lt;br /&gt;
      shapes = new ArrayList();&lt;br /&gt;
   }&lt;br /&gt;
   public int Count&lt;br /&gt;
   {&lt;br /&gt;
      get&lt;br /&gt;
      {&lt;br /&gt;
         return shapes.Count;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   public Shape this[ int index ]&lt;br /&gt;
   {&lt;br /&gt;
      get&lt;br /&gt;
      {&lt;br /&gt;
         return (Shape) shapes[index];&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   public void Add( Shape shape )&lt;br /&gt;
   {&lt;br /&gt;
      shapes.Add( shape );&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
   static void Main()&lt;br /&gt;
   {&lt;br /&gt;
      ShapeList drawing = new ShapeList();&lt;br /&gt;
      drawing.Add( new Rectangle() );&lt;br /&gt;
      drawing.Add( new Circle() );&lt;br /&gt;
      &lt;br /&gt;
      for( int i = 0; i &amp;lt; drawing.Count; ++i ) {&lt;br /&gt;
         Shape shape = drawing[i];&lt;br /&gt;
         shape.Draw();&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Rectangle.Draw&lt;br /&gt;
Circle.Draw&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Indexers don&amp;quot;t have to operate on actual arrays==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
 &lt;br /&gt;
class MySequence {  &lt;br /&gt;
 &lt;br /&gt;
  public int this[int index] { &lt;br /&gt;
    get { &lt;br /&gt;
      return index + 1; &lt;br /&gt;
    } &lt;br /&gt;
 &lt;br /&gt;
  } &lt;br /&gt;
}  &lt;br /&gt;
  &lt;br /&gt;
class MainClass {  &lt;br /&gt;
  public static void Main() {  &lt;br /&gt;
    MySequence sequence = new MySequence(); &lt;br /&gt;
 &lt;br /&gt;
    for(int i=0; i &amp;lt; 8; i++) &lt;br /&gt;
      Console.Write(sequence[i] + &amp;quot; &amp;quot;); &lt;br /&gt;
    Console.WriteLine(); &lt;br /&gt;
  } &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;1 2 3 4 5 6 7 8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Indexing with an Integer Indexer==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&amp;lt;LI&amp;gt;It is possible to overload the [ ] operator for classes that you create with an indexer.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;An indexer allows an object to be indexed like an array.&amp;lt;/LI&amp;gt;&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
class Pair&lt;br /&gt;
{&lt;br /&gt;
    public Pair(string name, object data)&lt;br /&gt;
    {&lt;br /&gt;
        this.name = name;&lt;br /&gt;
        this.data = data;&lt;br /&gt;
    }&lt;br /&gt;
    public string Name&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return(name);&lt;br /&gt;
        }&lt;br /&gt;
        set&lt;br /&gt;
        {&lt;br /&gt;
            name = value;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public object Data&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return(data);&lt;br /&gt;
        }&lt;br /&gt;
        set&lt;br /&gt;
        {&lt;br /&gt;
            data = value;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    string    name;&lt;br /&gt;
    object data;&lt;br /&gt;
}&lt;br /&gt;
class PairList&lt;br /&gt;
{&lt;br /&gt;
    public PairList()&lt;br /&gt;
    {&lt;br /&gt;
        row = new ArrayList();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void Load() &lt;br /&gt;
    {&lt;br /&gt;
        /* load code here */ &lt;br /&gt;
        row.Add(new Pair(&amp;quot;A&amp;quot;, 5551212));&lt;br /&gt;
        row.Add(new Pair(&amp;quot;B&amp;quot;, &amp;quot;Fred&amp;quot;));&lt;br /&gt;
        row.Add(new Pair(&amp;quot;C&amp;quot;, 2355.23m));&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // the indexer&lt;br /&gt;
    public Pair this[int column]&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return((Pair) row[column - 1]);&lt;br /&gt;
        }&lt;br /&gt;
        set&lt;br /&gt;
        {&lt;br /&gt;
            row[column - 1] = value;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    ArrayList    row;    &lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        PairList row = new PairList();&lt;br /&gt;
        row.Load();&lt;br /&gt;
        Console.WriteLine(&amp;quot;Column 0: {0}&amp;quot;, row[1].Data);&lt;br /&gt;
        row[1].Data = 12;    &lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Column 0: 5551212&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Indexing with an String Indexer==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
class Pair&lt;br /&gt;
{&lt;br /&gt;
    public Pair(string name, object data)&lt;br /&gt;
    {&lt;br /&gt;
        this.name = name;&lt;br /&gt;
        this.data = data;&lt;br /&gt;
    }&lt;br /&gt;
    public string Name&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return(name);&lt;br /&gt;
        }&lt;br /&gt;
        set&lt;br /&gt;
        {&lt;br /&gt;
            name = value;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public object Data&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return(data);&lt;br /&gt;
        }&lt;br /&gt;
        set&lt;br /&gt;
        {&lt;br /&gt;
            data = value;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    string    name;&lt;br /&gt;
    object data;&lt;br /&gt;
}&lt;br /&gt;
class PairList&lt;br /&gt;
{&lt;br /&gt;
    public PairList()&lt;br /&gt;
    {&lt;br /&gt;
        row = new ArrayList();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void Load() &lt;br /&gt;
    {&lt;br /&gt;
        /* load code here */ &lt;br /&gt;
        row.Add(new Pair(&amp;quot;Q&amp;quot;, 5551212));&lt;br /&gt;
        row.Add(new Pair(&amp;quot;A&amp;quot;, &amp;quot;text&amp;quot;));&lt;br /&gt;
        row.Add(new Pair(&amp;quot;B&amp;quot;, 2355.23m));&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public Pair this[int column]&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return( (Pair) row[column - 1]);&lt;br /&gt;
        }&lt;br /&gt;
        set&lt;br /&gt;
        {&lt;br /&gt;
            row[column - 1] = value;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    int FindPair(string name)&lt;br /&gt;
    {&lt;br /&gt;
        for (int index = 0; index &amp;lt; row.Count; index++)&lt;br /&gt;
        {&lt;br /&gt;
            Pair Pair = (Pair) row[index];&lt;br /&gt;
            if (Pair.Name == name)&lt;br /&gt;
            return(index);&lt;br /&gt;
        }&lt;br /&gt;
        return(-1);&lt;br /&gt;
    }&lt;br /&gt;
    public Pair this[string name]&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return( (Pair) this[FindPair(name)]);&lt;br /&gt;
        }&lt;br /&gt;
        set&lt;br /&gt;
        {&lt;br /&gt;
            this[FindPair(name)] = value;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    ArrayList    row;    &lt;br /&gt;
}&lt;br /&gt;
class Test&lt;br /&gt;
{&lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        PairList row = new PairList();&lt;br /&gt;
        row.Load();&lt;br /&gt;
        Pair val = row[&amp;quot;A&amp;quot;];&lt;br /&gt;
        Console.WriteLine(&amp;quot;A: {0}&amp;quot;, val.Data);&lt;br /&gt;
        Console.WriteLine(&amp;quot;B: {0}&amp;quot;, row[&amp;quot;B&amp;quot;].Data);&lt;br /&gt;
        row[&amp;quot;Q&amp;quot;].Data = &amp;quot;new value&amp;quot;;    // set the name&lt;br /&gt;
        Console.WriteLine(&amp;quot;Q: {0}&amp;quot;, row[&amp;quot;Q&amp;quot;].Data);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;A: 5551212&lt;br /&gt;
B: text&lt;br /&gt;
Unhandled Exception: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negativ&lt;br /&gt;
e and less than the size of the collection.&lt;br /&gt;
Parameter name: index&lt;br /&gt;
   at System.Collections.ArrayList.get_Item(Int32 index)&lt;br /&gt;
   at PairList.get_Item(Int32 column)&lt;br /&gt;
   at Test.Main()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Indexing with Multiple Parameters==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
public class Cell&lt;br /&gt;
{&lt;br /&gt;
    string name;&lt;br /&gt;
    &lt;br /&gt;
    public Cell(string name)&lt;br /&gt;
    {&lt;br /&gt;
        this.name = name;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public override string ToString()&lt;br /&gt;
    {&lt;br /&gt;
        return(name);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class Table&lt;br /&gt;
{&lt;br /&gt;
    Cell[,] table = new Cell[8, 8];&lt;br /&gt;
    &lt;br /&gt;
    int RowToIndex(string row)&lt;br /&gt;
    {&lt;br /&gt;
        string temp = row.ToUpper();&lt;br /&gt;
        return((int) temp[0] - (int) &amp;quot;A&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int PositionToColumn(string pos)&lt;br /&gt;
    {&lt;br /&gt;
        return(pos[1] - &amp;quot;0&amp;quot; - 1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public Cell this[string row, int column]&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return(table[RowToIndex(row), column - 1]);&lt;br /&gt;
        }&lt;br /&gt;
        set&lt;br /&gt;
        {&lt;br /&gt;
            table[RowToIndex(row), column - 1] = value;&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
    &lt;br /&gt;
    public Cell this[string position]&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return(table[RowToIndex(position),&lt;br /&gt;
            PositionToColumn(position)]);&lt;br /&gt;
        }&lt;br /&gt;
        set&lt;br /&gt;
        {&lt;br /&gt;
            table[RowToIndex(position),&lt;br /&gt;
            PositionToColumn(position)] = value;&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        Table table = new Table();&lt;br /&gt;
        &lt;br /&gt;
        table[&amp;quot;A&amp;quot;, 4] = new Cell(&amp;quot;A4&amp;quot;);&lt;br /&gt;
        table[&amp;quot;H&amp;quot;, 4] = new Cell(&amp;quot;H4&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        Console.WriteLine(&amp;quot;A4 = {0}&amp;quot;, table[&amp;quot;A&amp;quot;, 4]);&lt;br /&gt;
        Console.WriteLine(&amp;quot;H4 = {0}&amp;quot;, table[&amp;quot;H4&amp;quot;]);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;A4 = A4&lt;br /&gt;
H4 = H4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overload the MyArray indexer==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;  &lt;br /&gt;
  &lt;br /&gt;
class MyArray {   &lt;br /&gt;
  int[] a;    &lt;br /&gt;
  &lt;br /&gt;
  public int Length;&lt;br /&gt;
  &lt;br /&gt;
  public bool errflag;&lt;br /&gt;
    &lt;br /&gt;
  public MyArray(int size) {  &lt;br /&gt;
    a = new int[size];  &lt;br /&gt;
    Length = size;   &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  // This is the int indexer for MyArray.  &lt;br /&gt;
  public int this[int index] {  &lt;br /&gt;
    get {  &lt;br /&gt;
      if(indexCheck(index)) {  &lt;br /&gt;
        errflag = false;  &lt;br /&gt;
        return a[index];  &lt;br /&gt;
      } else {  &lt;br /&gt;
        errflag = true;  &lt;br /&gt;
        return 0;  &lt;br /&gt;
      }  &lt;br /&gt;
    }  &lt;br /&gt;
  &lt;br /&gt;
    set {  &lt;br /&gt;
      if(indexCheck(index)) {  &lt;br /&gt;
        a[index] = value;  &lt;br /&gt;
        errflag = false;  &lt;br /&gt;
      }  &lt;br /&gt;
      else errflag = true;  &lt;br /&gt;
    }  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  public int this[double idx] {  &lt;br /&gt;
    get {  &lt;br /&gt;
      int index = (int) idx; &lt;br /&gt;
 &lt;br /&gt;
      if(indexCheck(index)) {  &lt;br /&gt;
        errflag = false;  &lt;br /&gt;
        return a[index];  &lt;br /&gt;
      } else {  &lt;br /&gt;
        errflag = true;  &lt;br /&gt;
        return 0;  &lt;br /&gt;
      }  &lt;br /&gt;
    }  &lt;br /&gt;
  &lt;br /&gt;
    set {  &lt;br /&gt;
      int index = (int) idx; &lt;br /&gt;
 &lt;br /&gt;
      if(indexCheck(index)) {  &lt;br /&gt;
        a[index] = value;  &lt;br /&gt;
        errflag = false;  &lt;br /&gt;
      }  &lt;br /&gt;
      else errflag = true;  &lt;br /&gt;
    }  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  private bool indexCheck(int index) {  &lt;br /&gt;
   if(index &amp;gt;= 0 &amp;amp; index &amp;lt; Length) return true;  &lt;br /&gt;
   return false;  &lt;br /&gt;
  }  &lt;br /&gt;
}   &lt;br /&gt;
   &lt;br /&gt;
class MainClass {   &lt;br /&gt;
  public static void Main() {   &lt;br /&gt;
    MyArray myArray = new MyArray(5);  &lt;br /&gt;
  &lt;br /&gt;
    for(int i=0; i &amp;lt; myArray.Length; i++) &lt;br /&gt;
      myArray[i] = i;  &lt;br /&gt;
 &lt;br /&gt;
    // now index with ints and doubles &lt;br /&gt;
    Console.WriteLine(&amp;quot;myArray[1]: &amp;quot; + myArray[1]); &lt;br /&gt;
    Console.WriteLine(&amp;quot;myArray[2]: &amp;quot; + myArray[2]); &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(&amp;quot;myArray[1.1]: &amp;quot; + myArray[1.1]); &lt;br /&gt;
    Console.WriteLine(&amp;quot;myArray[1.6]: &amp;quot; + myArray[1.6]); &lt;br /&gt;
 &lt;br /&gt;
  }  &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;myArray[1]: 1&lt;br /&gt;
myArray[2]: 2&lt;br /&gt;
myArray[1.1]: 1&lt;br /&gt;
myArray[1.6]: 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use an indexer to create a fail-soft array.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
 &lt;br /&gt;
class MyArray {  &lt;br /&gt;
  int[] a;&lt;br /&gt;
 &lt;br /&gt;
  public int Length; &lt;br /&gt;
 &lt;br /&gt;
  public bool errflag;&lt;br /&gt;
   &lt;br /&gt;
  public MyArray(int size) { &lt;br /&gt;
    a = new int[size]; &lt;br /&gt;
    Length = size;  &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  // This is the indexer for MyArray. &lt;br /&gt;
  public int this[int index] { &lt;br /&gt;
    get { &lt;br /&gt;
      if(indexCheck(index)) { &lt;br /&gt;
        errflag = false; &lt;br /&gt;
        return a[index]; &lt;br /&gt;
      } else { &lt;br /&gt;
        errflag = true; &lt;br /&gt;
        return 0; &lt;br /&gt;
      } &lt;br /&gt;
    } &lt;br /&gt;
 &lt;br /&gt;
    set { &lt;br /&gt;
      if(indexCheck(index)) { &lt;br /&gt;
        a[index] = value; &lt;br /&gt;
        errflag = false; &lt;br /&gt;
      } &lt;br /&gt;
      else errflag = true; &lt;br /&gt;
    } &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  private bool indexCheck(int index) { &lt;br /&gt;
   if(index &amp;gt;= 0 &amp;amp; index &amp;lt; Length) &lt;br /&gt;
      return true; &lt;br /&gt;
   return false; &lt;br /&gt;
  } &lt;br /&gt;
}  &lt;br /&gt;
  &lt;br /&gt;
class MainClass {  &lt;br /&gt;
  public static void Main() {  &lt;br /&gt;
    MyArray myArray = new MyArray(5); &lt;br /&gt;
    int x; &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(&amp;quot;Fail quietly.&amp;quot;); &lt;br /&gt;
    for(int i=0; i &amp;lt; 10; i++) &lt;br /&gt;
      myArray[i] = i*10; &lt;br /&gt;
 &lt;br /&gt;
    for(int i=0; i &amp;lt; 10; i++) { &lt;br /&gt;
      x = myArray[i]; &lt;br /&gt;
      if(x != -1) Console.Write(x + &amp;quot; &amp;quot;); &lt;br /&gt;
    } &lt;br /&gt;
    Console.WriteLine(); &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(&amp;quot;\nFail with error reports.&amp;quot;); &lt;br /&gt;
    for(int i=0; i &amp;lt; 10; i++) { &lt;br /&gt;
      myArray[i] = i*10; &lt;br /&gt;
      if(myArray.errflag) &lt;br /&gt;
        Console.WriteLine(&amp;quot;myArray[&amp;quot; + i + &amp;quot;] out-of-bounds&amp;quot;); &lt;br /&gt;
    } &lt;br /&gt;
 &lt;br /&gt;
    for(int i=0; i &amp;lt; 10; i++) { &lt;br /&gt;
      x = myArray[i]; &lt;br /&gt;
      if(!myArray.errflag) &lt;br /&gt;
         Console.Write(x + &amp;quot; &amp;quot;); &lt;br /&gt;
      else &lt;br /&gt;
         Console.WriteLine(&amp;quot;myArray[&amp;quot; + i + &amp;quot;] out-of-bounds&amp;quot;); &lt;br /&gt;
    } &lt;br /&gt;
  } &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Fail quietly.&lt;br /&gt;
0 10 20 30 40 0 0 0 0 0&lt;br /&gt;
Fail with error reports.&lt;br /&gt;
myArray[5] out-of-bounds&lt;br /&gt;
myArray[6] out-of-bounds&lt;br /&gt;
myArray[7] out-of-bounds&lt;br /&gt;
myArray[8] out-of-bounds&lt;br /&gt;
myArray[9] out-of-bounds&lt;br /&gt;
0 10 20 30 40 myArray[5] out-of-bounds&lt;br /&gt;
myArray[6] out-of-bounds&lt;br /&gt;
myArray[7] out-of-bounds&lt;br /&gt;
myArray[8] out-of-bounds&lt;br /&gt;
myArray[9] out-of-bounds&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use indexer to add element==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
  public static void Main()&lt;br /&gt;
  {&lt;br /&gt;
    EmployeeList empList = new EmployeeList();&lt;br /&gt;
  &lt;br /&gt;
    empList[0] = new Employee(&amp;quot;F&amp;quot;);&lt;br /&gt;
    empList[1] = new Employee(&amp;quot;C&amp;quot;);&lt;br /&gt;
    empList[2] = new Employee(&amp;quot;Z&amp;quot;);&lt;br /&gt;
    for(int i = 0; i &amp;lt; empList.GetNumberOfEmployeeList(); i++)&lt;br /&gt;
    {&lt;br /&gt;
      Console.WriteLine(&amp;quot;Employee number {0}:&amp;quot;, i);&lt;br /&gt;
      Console.WriteLine(&amp;quot;Name: {0}&amp;quot;, empList[i].Name);&lt;br /&gt;
    }&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
      Console.WriteLine(&amp;quot;Using IEnumerable&amp;quot;);&lt;br /&gt;
      foreach (Employee c in empList)&lt;br /&gt;
      {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Name: {0}&amp;quot;, c.Name);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    catch{}      &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class EmployeeList : IEnumerable&lt;br /&gt;
{&lt;br /&gt;
  private ArrayList carArray;&lt;br /&gt;
  public EmployeeList()&lt;br /&gt;
  {&lt;br /&gt;
    carArray = new ArrayList();&lt;br /&gt;
  }&lt;br /&gt;
  // The indexer.&lt;br /&gt;
  public Employee this[int pos]&lt;br /&gt;
  {&lt;br /&gt;
    get&lt;br /&gt;
    {&lt;br /&gt;
      if(pos &amp;lt; 0)&lt;br /&gt;
        throw new IndexOutOfRangeException(&amp;quot;Hey! Index out of range&amp;quot;);&lt;br /&gt;
      else&lt;br /&gt;
        return (Employee)carArray[pos];&lt;br /&gt;
    }&lt;br /&gt;
    set&lt;br /&gt;
    {&lt;br /&gt;
      carArray.Insert(pos, value);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public int GetNumberOfEmployeeList()&lt;br /&gt;
  {&lt;br /&gt;
    return carArray.Count;&lt;br /&gt;
  }&lt;br /&gt;
  public IEnumerator GetEnumerator()&lt;br /&gt;
  {&lt;br /&gt;
    return carArray.GetEnumerator();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Employee&lt;br /&gt;
{&lt;br /&gt;
  public Employee(string name)&lt;br /&gt;
  {&lt;br /&gt;
    this.Name = name;&lt;br /&gt;
  }&lt;br /&gt;
  public string Name;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Employee number 0:&lt;br /&gt;
Name: F&lt;br /&gt;
Employee number 1:&lt;br /&gt;
Name: C&lt;br /&gt;
Employee number 2:&lt;br /&gt;
Name: Z&lt;br /&gt;
Using IEnumerable&lt;br /&gt;
Name: F&lt;br /&gt;
Name: C&lt;br /&gt;
Name: Z&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>