-1

我们的班主任给了我们一个程序Indexers(),当我在我的计算机中编译并执行程序时,我得到了错误

错误:1 运算符“<”不能应用于“int”和“方法组”类型的操作数

为什么我收到此错误??...请解释程序的逻辑以及为什么使用索引器,并且我还收到运行时错误
索引超出范围。必须是非负数且小于
集合的大小。参数名称:索引

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
    namespace ConsoleApplication2
    {
        class Program
        {
            ArrayList array = new ArrayList();
            public object this[int index]
            {
                get
                {
                    if (index < 0 || index >= array.Count)
                    {
                        return (null);
                    }
                    else
                    {
                        return (array[index]);
                    }
                }
                set
                {
                    array[index] = value;
                }
            }
        }
        class Demo
        {
            public static void Main()
            {
                Program p = new Program();
                p[0] = "123";
                p[1] = "abc";
                p[2] = "xyz";
                for (int i = 0; i <p.Count ; i++)
                {
                    Console.WriteLine(p[i]);
                }
            }
        }
    }
4

3 回答 3

4

它失败了,因为编译器找不到名为Count. 相反,它找到了一种方法——这里没有显示,或者如果Program实现IEnumerable<object>了,那么它很可能是 Linq 的Count扩展方法。

尝试添加Count属性Program

class Program
{
    ...

    public int Count
    {
        get { return this.array.Count; }
    }
}

这将解决编译器错误。现在,如果您想知道为什么要使用索引器……我想是因为您的老师想说明如何使用它们。索引器只是一种语法糖,它只是让编写代码p.GetItem(i)看起来更干净,p[i].

于 2013-07-02T14:10:01.843 回答
2

我在您的程序中没有看到 Count 实现。添加 Count 实现并尝试重新编译。

    class Program
    {
        ArrayList array = new ArrayList();

        public int Count { get { return array.Count; } }

        public object this[int index]
        {
            get
            {
                if (index < 0 || index >= array.Count)
                {
                    return (null);
                }
                else
                {
                    return (array[index]);
                }
            }
            set
            {
                array[index] = value;
            }
        }
    }
于 2013-07-02T14:10:07.457 回答
1

您应该添加一个 Count 属性和一个将 ArrayList 初始化为正确大小的构造函数,如下所示:

class Program
{
    ArrayList array = null;

    public Program(int size)
    {
        array = new ArrayList(size);
    }

    public object this[int index]
    {
        get
        {
            if (index < 0 || index >= array.Count)
            {
                return (null);
            }
            else
            {
                return (array[index]);
            }
        }
        set
        {
            array[index] = value;
        }
    }

    public int Count
    {
        get
        {
            return array.Count;
        }
    }
}
于 2013-07-02T14:15:30.860 回答