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()更名的话都已能正常把数据加入队列,奇了怪了。

解决方案 »

  1.   

    为什么要从写tostring呢?
    Queue <string> _s = new Queue <string>(); 
    public void Add(string s) 

    _s.Enqueue(s); //无法将s加入队列 
    } string value=q.Dequeue();这样就使里面的 内容了?为什么从写?
      

  2.   

    我测试,正常的 public override string ToString()
      

  3.   

    为了使用方便呗,现在我用GetString()函数来取代重写ToString(),解决问题了
    我就是想搞清楚,为什么用ToString()就不行
      

  4.   

    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
      

  5.   

    很简单,那个泛型的定义是object.ToString()实现的。
    可能
    嘿嘿。
      

  6.   

    完整的代码如下    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();
            }
        }
      

  7.   

    天哪,谁能告诉我怎么才能跟踪到framework的代码里面去?
    framework的源代码哪里有?我想看看Queue的实现
      

  8.   

    3 楼已经给你正解了。 把 new 关键词换成 override
      

  9.   

    你要找到这个类里面定义的Tostring