以下是我一直在尝试部署的代码。正如您所看到的,我正在部署一个空白接口,为列表“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();
}
}
}
答案 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()
函数,默认情况下是类型的名称。