无法向Queue添加数据

tabris17 2008-05-09 02:23:43
vs2005 .net2.0
如下代码

class Test
{
Queue<string> _s = new Queue<string>();
public void Add(string s)
{
_s.Enqueue(s); //无法将s加入队列
}
public new string ToString()
{
if(_s.Count>0)
return _s.Dequeue();
return null;
}
}

问题就出在ToString()中引用了_s,如果ToString()中不调用_s,或者把ToString()更名的话都已能正常把数据加入队列,奇了怪了。
...全文
206 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yilanwuyu123 2008-05-16
  • 打赏
  • 举报
回复
你要找到这个类里面定义的Tostring
tabris17 2008-05-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 weiyue_net 的回复:]
3 楼已经给你正解了。 把 new 关键词换成 override
[/Quote]

一开始就试过嘞
还是不行啊
weiyue_net 2008-05-14
  • 打赏
  • 举报
回复
3 楼已经给你正解了。 把 new 关键词换成 override
tabris17 2008-05-14
  • 打赏
  • 举报
回复
天哪,谁能告诉我怎么才能跟踪到framework的代码里面去?
framework的源代码哪里有?我想看看Queue的实现
bondbondbond 2008-05-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tabris17 的回复:]
引用 10 楼 ericzhangbo1982111 的回复:
....你的代码我这里没问题
没有你出现的情况..


太妖了
太妖了
太妖了
太妖了
太妖了
太妖了
乱世必出妖孽啊
[/Quote]
........
tabris17 2008-05-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ericzhangbo1982111 的回复:]
....你的代码我这里没问题
没有你出现的情况..
[/Quote]

太妖了
太妖了
太妖了
太妖了
太妖了
太妖了
乱世必出妖孽啊
ericzhangbo1982111 2008-05-12
  • 打赏
  • 举报
回复
....你的代码我这里没问题
没有你出现的情况..
tabris17 2008-05-12
  • 打赏
  • 举报
回复
完整的代码如下

struct ConditionPair
{
public string Joint;
public string Condition;
public ConditionPair(string joint, string condition)
{
this.Joint = joint;
this.Condition = condition;
}
}

public class ConditionBuilder
{
private Queue<ConditionPair> _conditionPairQueue = new Queue<ConditionPair>();

public void Add(string joint, string condition)
{
if (condition != null && joint != null)
{
_conditionPairQueue.Enqueue(new ConditionPair(joint, condition));//队列Count为1,但是里面的数组是null
}//跟踪到这里count又变成0了
}

public new string ToString() //不管是new还是override都不行,只要改个函数名就可以了,太妖了
{
int queueSize = _conditionPairQueue.Count;
if (queueSize == 0)
{
return null;
}
StringBuilder sb = new StringBuilder();
sb.Append(_conditionPairQueue.Dequeue().Condition);
bool isPreviousJointOR = false;
for (int i = 1; i < queueSize; i++)
{
ConditionPair conditionPair = _conditionPairQueue.Dequeue();
if (isPreviousJointOR)
{
sb.Insert(0, '(');
sb.Append(')');
}
sb.Append(' ');
sb.Append(conditionPair.Joint);
sb.Append(' ');
sb.Append(conditionPair.Condition);
isPreviousJointOR = conditionPair.Joint.ToLower() == "or";
}
return sb.ToString();
}
}
b哈利路亚d 2008-05-09
  • 打赏
  • 举报
回复
很简单,那个泛型的定义是object.ToString()实现的。。。。
可能。。。
嘿嘿。
noky 2008-05-09
  • 打赏
  • 举报
回复
看到你的类后,自己做了测试,没有任何的问题啊。
t88266236 2008-05-09
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
class Test
{
Queue <string> _s = new Queue <string>();
public void Add(string s)
{
_s.Enqueue(s); //无法将s加入队列
}
public new string ToString()
{
if(_s.Count>0)
return _s.Dequeue();
return null;
}
public static void Main()
{
Test t = new Test();
t.Add("this");
Console.WriteLine(t.ToString());
}
}

运行正常
SDK 2.0
tabris17 2008-05-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ericzhangbo1982111 的回复:]
为什么要从写tostring呢?
Queue <string> _s = new Queue <string>();
public void Add(string s)
{
_s.Enqueue(s); //无法将s加入队列
}

string value=q.Dequeue();这样就使里面的 内容了?为什么从写?
[/Quote]
为了使用方便呗,现在我用GetString()函数来取代重写ToString(),解决问题了


我就是想搞清楚,为什么用ToString()就不行
tabris17 2008-05-09
  • 打赏
  • 举报
回复
怪了,没更新?看不到回复
LGame 2008-05-09
  • 打赏
  • 举报
回复
ToString 是基类的方法

[Quote=引用 2 楼 jinjazz 的回复:]
我测试,正常的

public override string ToString()
[/Quote]
jinjazz 2008-05-09
  • 打赏
  • 举报
回复
我测试,正常的

public override string ToString()
ericzhangbo1982111 2008-05-09
  • 打赏
  • 举报
回复
为什么要从写tostring呢?
Queue <string> _s = new Queue <string>();
public void Add(string s)
{
_s.Enqueue(s); //无法将s加入队列
}

string value=q.Dequeue();这样就使里面的 内容了?为什么从写?


110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧