请c#高手帮忙看个小程序,程序没有错误,我对运行结果有疑问

我针对数组做了个索引器,(此程序是模仿arrylist的部分功能)
在main函数中访问时,为什么这样调用
box[0]=123;
Console.WriteLine(box[0]);//输出结果为空 ,高手注意这里
box.Add(123);
Console.WriteLine(box[0]);//输出结果为123,高手注意这里

程序如下,命名空间省略
public class TrainCarriage//针对内部数组的索引器
{
private object[] _seatlist;
private int _capacity;
private int _count;

public TrainCarriage()
{
this._capacity = 118;
this._seatlist=new object[this._capacity];
this._count = 0;
}

public int Capacity
{
get
{
return this._capacity;
}
}
public int Count
{
get
{
return this._count;
}
}

public object this[int i] //针对数组做的索引器
{
get
{
object rtnobj;
if (i >= 0 && i < this._count)
{
rtnobj = this._seatlist[i];
}
else
{
rtnobj = null;
}
return rtnobj;
}
set
{
if (i >= 0 && i < this._count)
{
this._seatlist[i] = value;
}
else
{

}
}
}

public void Add(object value)
{
if (this._count < this._capacity)
{
this._seatlist[this._count] = value;
this._count++;
}
else
{
Console.WriteLine("已满");
}
}

public class Demo
{
public static void Main(string[] args)
{
TrainCarriage box=new TrainCarriage();
box[0]=123;
Console.WriteLine(box[0]);//输出结果为空 ,高手注意这里
box.Add(123);
Console.WriteLine(box[0]);//输出结果为123,高手注意这里
}
}
}

1. 应该把public object this[int i]中的两个if条件改为:
if (i >= 0 && i <=this._count),就是在你的基础上,把小于this._count改为小于等于了。这是因为this.count初始化为0,0怎么能小于0能。所以第一个输出语句为null.
2.虽然把上面的问题解决了,但我看出你的程序还是有问题的。你想,如果我一直用this[int i]来进行赋值,数组下标为1的时候,又不能赋值了。因为在this[int i]方法中,count的值没有加1。
3.就是在this[int i]中让count自增了,在这个方法中没有考虑越界的问题。不受this._capacity的限制。
你的程序对我也有一些帮助,就是我更学会了用this。以前不知道this还能这么用。呵。
希望你的程序越来越完善。good luck to you!
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-07-19
你赋值时条件不成立所致!
第2个回答  2009-07-19
简单说来,因为你在做 box[0]=123时,count并没有先加1,这样你的count一直是0,而索引器赋值的判断是要小于count的时候才能进行,不然返回的是null,所以你不能这样赋值。

c#小程序 输出有问题 请高手指教
where sysparameterid not in (select sysparameterid from ycscmdb..tc_sysparameter) order by sysparameterid 这样就生成了一堆我想要的插入语句了,再将生成的结果复制到*.sql当中,脚本即生成,耶~生成的结果就会是如下(就列两行意思一下,嘻嘻~~~):insert into TC_SysParameter (SysParamet...

一道C#小程序,各位高手请进!!
StringBuilder first = new StringBuilder();前面 StringBuilder 是声明,后面new StringBuilder()才是实例化 。由于之前已经对first 声明,故 first = new StringBuilder("goodbye"); 前面不需要加StringBuilder ,但此时的first 已经重新实例化了,跟之前的first已经无关。

C#菜鸟级小程序求更改,高手请帮忙,谢谢
这个题的意图是输两个数然后比了大小输出.然后再输YES|No继续由用户再输两个数比较这两数的大小? 还是在输入yes后用户继续输入数字 然后一直到输NO的时候 比较出用户输入的茫茫多数字中最大的数?

C#发牌小程序有重复的问题,帮忙看看啦!
那个for循环有问题,你在设置i=1时,没有跳出循环,导致give的值改变了,修改成:for (; ; ){ if (thecards[give].x == false){ thecards[give].x = true;break;} give = rd.Next(54);}

使用SharpDevelop运行C#程序运行不了,调试下面全变灰了,请教各位大神...
这个SharpDevelop是不能直接运行编写的,C#程序的。除非大神,自己写个小程序直接调用出。开始按钮里面的运行。。编写完程序后,保存,然后用,开始里面的运行,根据路径打开。。C#教学网址,开始是用的这个软件编写,后边就用VS了。。http:\/\/www.enet.com.cn\/eschool\/video\/c\/ 看前两个视频就可以了。

C#中一段小程序出错了,解决不了,求高手帮忙解决
C#里的占位符不是这样写的吧 把{a} 改为 {0} 把{b} 也改为{0} 。或者不用占位符,直接Console.WriteLine(a);

这个小程序!!!c#的!麻烦懂的朋友给我讲讲好吗?
class Program { static void Main(string[] args){ int sum, i; \/\/定义两个变量,sum用来求和,i是用来计数的 sum = 0; i = 1; \/\/赋初值 while (i <= 100) \/\/while循环,括号里面是条件,条件为真时执行下面花括号的语句 { sum += i; \/\/求和 i++; \/\/计数器加1 } Console....

请教哪位高手,用C#做个计算时长的小程序
public static double getTimeDiff(string start,string end,string mode="m"){ DateTime d1, d2;mode=mode.Trim().ToLower();if (DateTime.TryParse(start, out d1) && DateTime.TryParse(end, out d2)){ if (mode == "m")return (d2 - d1).TotalMinutes;else if (mode == "h")...

帮忙修改C#小程序!急!!!高分!!在线等!!
我的 帮忙修改C#小程序!急!!!高分!!在线等!! 模拟一个通信录,可以实现一下功能(1)增加新联系人信息(2)删除指定联系人信息(3)修改指定联系人信息(4)查询联系人信息(5)增加新群组信息(6)删除指定群组信息(7)修改群组... 模拟一个通信录,可以实现一下功能(1)增加新联系人信息(2)删除指定联系人信息(3)...

c# 小程序陷入死循环
C#的数组的index是从0开始的,所以a2里面如果有100个数据,i的最大值就是99.这段程序有些问题。比如100个点,Main线程先填进了50个,子线程画了50个点,这个时候子线程判断画线结束,那么drawline函数退出了。Main添加后50个点,只能重新开启新的线程。建议画线直接放进主线程做,不会有太多的效率...

相似回答
大家正在搜