【问题标题】:C# Types that accept Indexing [closed]接受索引的 C# 类型 [关闭]
【发布时间】:2017-02-22 17:10:14
【问题描述】:

内置索引的所有类型是什么。例如,我知道 ICollection 和 IEnumerable 不知道,但我想要一份所有功能的列表。

除了列表,如果有人可以提供,我的具体问题是索引网格上的所有 x,y 点,所以如果可能的话,我想通过索引访问 x,y 处的对象。

谢谢

【问题讨论】:

  • 准确解释您要完成的工作。我们为您提供一份清单不会成为一个非常有用的问题。
  • 获取 .net 源代码并搜索 'this['

标签: c# indexing


【解决方案1】:

我对 mscorlib 进行了快速检查,结果如下; 命名空间下System.Collections;

ArrayList
BitArray
HashTable
IDictionary, hence all the implementations.
IList, hence all the implementations.
SortedList

在命名空间System.Collections.Generic

Dictionary<T, T>
IDictionary<T, T>, hence all the implementations.
IList<T>, hence all the implementations.
IReadOnlyDictionary<T, T>, hence all the implementations.
IReadOnlyList<T>, hence all the implementations.
List<T>, hence all the implementations.

你也有数组。 但是,我建议您为您的特定任务使用自定义类。 您需要提供有关 x、y 处的 Grid 元素或对象的信息。这取决于用户吗?是你提供的吗?

这是一个简单的通用方法。

class GridManager<T>
{
    private T[,] _matrix;

    public GridManager(int rows, int columns)
    {
        _matrix = new T[rows, columns];
    }

    public T this[int i, int j]
    {
        get
        {
            return _matrix[i, j];
        }
        set
        {
            _matrix[i, j] = value;
        }
    }
}

【讨论】:

  • 虽然您很高兴回答这个问题,但这会鼓励人们继续提出糟糕/低质量/不清楚的问题。这个问题已经有 4 票赞成,甚至可能会被删除……连同你的答案。
  • 我什至不知道这是否 100% 准确。 Dictionary 例如,使用键,而不是索引。
  • @DangerZone 完全由用户决定这些“键”的含义。请记住,数组和字典都是一对一的函数。与字典的唯一区别是,它不保证您的密钥存在(例如,您无法定义您的域)。
  • @welrocken 我认为他的意思是,在您的情况下,可能的索引受到初始网格大小的限制。字典通过添加键值对来动态扩展。
  • @welrocken 哦,我同意,这是一种方法。问题是这个问题是如此模糊,以至于我们不知道这是否是 OP 想要的(它可能是)——我只是想确认一下,DangerZone 声称字典和数组是根本不同的东西是绝对正确的即使他们都使用索引器。顺便提一句。索引器实际上可以通过反射 (PropertyInfo.GetIndexParameters) 找到它们在幕后所做的事情......好吧,这需要更多的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
相关资源
最近更新 更多