实现访问列表的空白界面

时间:2011-12-15 09:19:45

标签: c# list interface arraylist

以下是我一直在尝试部署的代码。正如您所看到的,我正在部署一个空白接口,为列表“mylist”创建一个特殊的数据类型“mydatatype”。 在输出中,我希望显示指定的值。但我得到的是乱码数据。有人可以解释一下吗?

public class list
{
    interface mydatatype
    {
    }
    public class mystring : mydatatype
    {
        public string mystrings{ get; set; }

    }
    public class myint : mydatatype
    {
        public int myints{ get; set; }
    }
    public class mydouble : mydatatype
    {
        public double mydoubles{ get; set; }
    }
    public static void Main() 
    {


        List<mydatatype> mylist = new List<mydatatype>
            {
                new mystring(),
                new myint(),
                new mydouble(),
            };
        mystring ab = new mystring();
        myint mi = new myint();
        mydouble mf = new mydouble();

        ab.mystrings = "asdf";
        mi.myints = 12;
        mf.mydoubles = 12.223;

        mylist.Add(ab);
        mylist.Add(mi);
        mylist.Add(mf);
        foreach (mydatatype element in mylist)
        {
            Console.WriteLine(element);
        }

        Console.ReadLine();
       } 

    }
}

3 个答案:

答案 0 :(得分:2)

“乱码数据”不是真正的错误描述...

但是,这里发生的事情是Console.WriteLine(element);Console.WriteLine(element.ToString());相同。因为您没有在类中重写ToString,所以它将输出类名而不是值。你会这样做:

public class mystring : mydatatype
{
    public string mystrings{ get; set; }

    public override string ToString()
    {
        return mystrings;
    }

}
public class myint : mydatatype
{
    public int myints{ get; set; }

    public override string ToString()
    {
        return myints.ToString();
    }
}
public class mydouble : mydatatype
{
    public double mydoubles{ get; set; }

    public override string ToString()
    {
        return mydoubles.ToString();
    }
}

答案 1 :(得分:0)

您需要覆盖每个类中的ToString来控制输出。目前它只会打印出每个对象的类名。

您最初使用不同数据类型的3个实例初始化列表,这就是为什么您可能会在添加之前看到这些值打印的原因。我想这就是'乱码数据'的意思。

答案 2 :(得分:0)

数组列表中有六个元素。三个未初始化的,你在实例化列表时放入它,以及之后添加的三个额外初始化的列表。

显示列表中的每个元素将在每个元素上调用ToString()函数,默认情况下是类型的名称。