我们的班主任在Indexers()
上给了我们一个程序,当我编译并在我的计算机上执行程序时出现错误
错误:1运营商'<'不能应用于'int'类型的操作数 '方法组'
为什么我收到此错误?...并请解释程序的逻辑以及为什么使用索引器,我也得到了
运行时错误
指数超出范围。必须是非负的且小于
的大小
采集。
参数名称:index
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]);
}
}
}
}
答案 0 :(得分:4)
它失败了,因为编译器找不到名为Count
的属性。相反,它找到了一个方法 - 无论是在这里显示的方法,还是Program
实现IEnumerable<object>
,那么它很可能是Linq的Count
扩展方法。
尝试将Count
属性添加到Program
class Program
{
...
public int Count
{
get { return this.array.Count; }
}
}
这将解决编译器错误。现在,如果你想知道为什么它正在使用indexers ......我想,因为你的老师想说明如何使用它们。索引器只是syntactic sugar的一小部分,这使得编写p.GetItem(i)
之类的代码看起来更干净,p[i]
。
答案 1 :(得分: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;
}
}
}
答案 2 :(得分: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;
}
}
}