【问题标题】:Make your own array [duplicate]制作自己的数组[重复]
【发布时间】:2015-07-18 10:01:33
【问题描述】:

这可能是一个非常基本的问题,但真的不知道如何解决。我想创建以下内容:

public class MyArray
{
    List<KeyValuePair<int, object>> myList = new List<KeyValuePair<int, object>>();

    public void Set_Value(int index, object value)
    {
        myList = myList.Where(a => a.Key != index).ToList();
        myList.Add(new KeyValuePair<int, object>(index, value));
    }
    public object Get_Value(int index)
    {
        if (myList.Any(a => a.Key == index)) return myList.FirstOrDefault(a => a.Key == index).Value;
        else return null;
    }
}
class Program
{
    static void Main(string[] args)
    {
        MyArray array = new MyArray();
        array[0] = "Hello world!";
    }
}

制作一个我自己操作的数组...

【问题讨论】:

  • 那么您的数组实现有什么问题?
  • 对不起,它是重复的,我在 google 中找不到它...
  • 感谢您的回答
  • 还值得注意的是,您对这种机制的实现在很多方面都超级效率低下。
  • 这叫做indexed property

标签: c#


【解决方案1】:

你可以在你的类中添加一个索引操作符:

public object this[int index]
{
    get
    {
        if (myList.Any(a => a.Key == index)) return myList.FirstOrDefault(a => a.Key == index).Value;
        else return null;
    }
    set
    {
        myList = myList.Where(a => a.Key != index).ToList();
        myList.Add(new KeyValuePair<int, object>(index, value));
    }
}

请注意,您有几个机会来改进您的代码;我只是复制/粘贴它以显示索引运算符的机制。

【讨论】:

    【解决方案2】:

    我认为您要问的是如何重载索引器运算符。

    为此,请参见此处: How do I overload the [] operator in C#

    但是,我建议不要在这里重新创建轮子。实际使用数组或从集合类继承可能会更好。

    【讨论】:

    • 如果您认为某个问题由另一个问题回答,您应该标记/投票将其作为重复问题关闭,而不是发布带有重复问题链接的答案。
    猜你喜欢
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多