C#需要什么索引器

时间:2010-12-25 19:19:22

标签: c#

今天我已经看过索引器了,但我有点困惑。是否真的需要索引器?使用索引器有什么好处.....提前感谢

7 个答案:

答案 0 :(得分:6)

我想最简单的答案是看看你如何使用(比方说)List<T>。你愿意写:

 string foo = list[10];

 string foo = list.Get(10);

同样对于字典,您更愿意使用:

 map["foo"] = "bar";

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

就像属性一样,对于它们来说,没有真正的需要与仅遵循约定的命名方法相比......但是在我看来,它们使代码更容易理解 - 这是最重要的一个功能可以做的事情。

答案 1 :(得分:3)

使用索引器,您可以获得对集合中对象的引用,而无需遍历整个集合。

假设您有数千个对象,并且您需要最后一个对象。您只需使用所需对象的索引,而不是遍历集合中的所有项目。

索引器不必是整数,所以你可以使用一个字符串,例如,(虽然你可以使用任何对象,只要集合支持它)作为索引器 - 这让我们你在集合中“命名”对象以供以后检索,也非常有用。

答案 2 :(得分:2)

我认为zedo最接近恕我直言的真正原因,他们已经添加了这个功能。这是为了方便,就像我们拥有属性一样。

代码更易于输入,更易于阅读,只需简单的抽象即可帮助您理解。

例如:

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.

答案 3 :(得分:1)

索引器允许您以与创建集合类时有用的数组相同的方式引用您的类,但是在类似于类数组的行为中也可以在其他情况下使用,例如在处理大型时提交或抽象一组有限资源。

答案 4 :(得分:0)

是的,他们非常使用

您可以使用索引器来获取索引对象。

取自MSDN

索引器最常以类型实现,其主要目的是封装内部集合或数组。

Full Story

答案 5 :(得分:-1)

由于某种原因,使用索引器可以让您创建有意义的索引来存储或映射您的数据。然后你可以通过有意义的索引从另一边获得它。

答案 6 :(得分:-1)

using System;

/ *这是一个简单的程序。我想这会帮助你理解* /

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
*/