C# 实现访问列表的空白接口

C# 实现访问列表的空白接口,c#,list,interface,arraylist,C#,List,Interface,Arraylist,下面是我一直试图部署的代码。如您所见,我正在部署一个空白接口,为列表“mylist”创建一个特殊的数据类型“mydatatype”。 在输出中,我希望显示指定的值。但我得到的是乱七八糟的数据。有人能解释一下吗 public class list { interface mydatatype { } public class mystring : mydatatype { public string mystrings{ get; set;

下面是我一直试图部署的代码。如您所见,我正在部署一个空白接口,为列表“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();
       } 

    }
}
公共类列表
{
接口mydatatype
{
}
公共类mystring:mydatatype
{
公共字符串mystrings{get;set;}
}
公共类myint:mydatatype
{
公共整数myints{get;set;}
}
公共类mydouble:mydatatype
{
公共双MyDouble{get;set;}
}
公共静态void Main()
{
List mylist=新列表
{
新mystring(),
新myint(),
新mydouble(),
};
mystring ab=新mystring();
myint mi=新的myint();
mydouble mf=新的mydouble();
ab.mystrings=“asdf”;
mi.myints=12;
mf.mydoubles=12.223;
添加(ab);
添加(mi);
mylist.Add(mf);
foreach(mylist中的mydatatype元素)
{
控制台写入线(元素);
}
Console.ReadLine();
} 
}
}

您需要在每个类中重写
ToString
,以控制输出。目前,它只会打印出每个对象的类名

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

乱七八糟的数据”并不是一个真正的错误描述

然而,这里发生的是
Console.WriteLine(元素)
与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();
    }
}

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


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

请向我们显示您获得的“乱码数据”。是否有任何原因导致您使用嵌套类型而忽略.NET命名约定?乱码的意思是我的输出如下,以及“测试申请"是我的项目名称::
TestApplications.list+mystrings-TestApplications.list+myint-TestApplications.list+mydouble-TestApplications.list+mytrings-TestApplications.list+mydouble
**需要注意的是,它不显示指定的值,而是显示数据类型的名称及其名称那太过分了。正如一些精英顾问所说,我必须重写ToString()方法。有人能解释一下如何运用这个想法吗???@deepaksahu:请看我答案的更新。顺便说一句:如果答案不能完全回答你的问题,你不应该接受。嘿,谢谢丹尼尔·希尔加思。我刚刚计算出了相同的结果,并在您的更新中看到了相同的结果。。现在我的代码正在正常工作。。。谢谢编码快乐。是的,你是对的,Jaapjan。我刚刚从列表声明中删除了初始化组件,现在我没有得到那些未初始化的数据。此外,我成功地实现了ToString覆盖,现在我得到了我想要的输出。