C# 实现访问列表的空白接口
下面是我一直试图部署的代码。如您所见,我正在部署一个空白接口,为列表“mylist”创建一个特殊的数据类型“mydatatype”。 在输出中,我希望显示指定的值。但我得到的是乱七八糟的数据。有人能解释一下吗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;
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覆盖,现在我得到了我想要的输出。