| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 656 人关注过本帖
标题:[求助]关于重载索引器的报错问题!
只看楼主 加入收藏
yjf518899
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-8-14
收藏
 问题点数:0 回复次数:3 
[求助]关于重载索引器的报错问题!

using System;
using System.Collections.Generic;
using System.Text;

namespace MyConApp例4_3
{
class Program
{
private int count = 0;
private int position = 0;
private string[] strings;
public string this[int index]
{
get
{
if (index < 0 || index >= strings.Length)
{
Console.WriteLine("Error,Current item doesn't exist.");
return null;
}
else
{
return strings[index];
}
}
set
{
if (index >= 0 && index < strings.Length)
{
strings[index] = value;
if (position < index + 1)
{
position = index + 1;
count++;
}
}
else
{
Console.WriteLine("Index Error!");
}
}
}
public string this[string str]//重载索引器
{
get
{
int index=0;
for (int i = 0; i < strings.Length; i++)
{
if (strings[i].StartsWith(str))
{
index = i;
break;
}
}
return this[index];
}
set
{
int index=0;
for (int j = 0; j < strings.Length; j++)
{
if (strings[j].StartsWith(str))
{
index = j;
break;
}
this[index] = value;
}
}
}

public Program()
{
strings = new string[100];
}
public Program(params string[] init)
{
strings = new string[100];
foreach (string i in init)
{
strings[position] = i;
position++;
count++;
}
}
static void Main(string[] args)
{
Program pp1 = new Program();
Program pp2 = new Program("mestring one", "yourstring two", "himstring three");
pp2["your"] = "changed string";
Console.WriteLine(pp2["me"]);
}
}
}

这是一个索引器重载的测试程序,但程序在运行时报错,我不知道为什么?如果把红色代码去掉后,是正常的。
保留红色代码,去掉蓝色代码,在后面添加:Console.WriteLine(pp2[0]);得到的结果竟然是"changed string",简直不可思议,哪位高手帮我分析分析?非常感谢!

搜索更多相关主题的帖子: 索引 重载 
2006-08-31 21:58
chenjin145
Rank: 1
等 级:禁止访问
帖 子:3922
专家分:0
注 册:2006-7-12
收藏
得分:0 
以下是引用yjf518899在2006-8-31 21:58:24的发言:

using System;
using System.Collections.Generic;
using System.Text;

namespace MyConApp例4_3
{
class Program
{
private int count = 0;
private int position = 0;
private string[] strings;
public string this[int index]
{
get
{
if (index < 0 || index >= strings.Length)
{
Console.WriteLine("Error,Current item doesn't exist.");
return null;
}
else
{
return strings[index];
}
}
set
{
if (index >= 0 && index < strings.Length)
{
strings[index] = value;
if (position < index + 1)
{
position = index + 1;
count++;
}
}
else
{
Console.WriteLine("Index Error!");
}
}
}
public string this[string str]//重载索引器
{
get
{
int index=0;
for (int i = 0; i < strings.Length; i++)
{
if (strings[i].StartsWith(str))
{
index = i;
break;
}
}
return this[index];
}
set
{
int index=0;
for (int j = 0; j < strings.Length; j++)
{
if (strings[j].StartsWith(str))
{
index = j; //這裡j始終=0
break;
}
this[index] = value;
}
}
}

public Program()
{
strings = new string[100];
}
public Program(params string[] init)
{
strings = new string[100];
foreach (string i in init)
{
strings[position] = i;
position++;
count++;
}
}
static void Main(string[] args)
{
Program pp1 = new Program();
Program pp2 = new Program("mestring one", "yourstring two", "himstring three");
pp2["your"] = "changed string";
Console.WriteLine(pp2["me"]);
}
}
}

这是一个索引器重载的测试程序,但程序在运行时报错,我不知道为什么?如果把红色代码去掉后,是正常的。
保留红色代码,去掉蓝色代码,在后面添加:Console.WriteLine(pp2[0]);得到的结果竟然是"changed string",简直不可思议,哪位高手帮我分析分析?非常感谢!


[url=javascript:alert(1);] [div]fdgfdgfdg\" on\"[/div] [/url]
2006-09-01 10:06
yjf518899
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-8-14
收藏
得分:0 
版主什么意思啊???

If you think you can ,you can!
2006-09-02 12:02
yjf518899
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-8-14
收藏
得分:0 
了解了,this[index] = value;这行代码应该移到下一个大括号后面!
非常感谢!

If you think you can ,you can!
2006-09-02 12:07
快速回复:[求助]关于重载索引器的报错问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033135 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved