我是一名初学者,并为我的问题寻找一个简单的例子但没有成功。我有两个类,并希望将类对象添加到单个列表,然后将类中的值打印到控制台。如果之前已经回答过,我道歉。
class onetwo
{
}
class classOne:onetwo
{
int item1 = 10;
int item2 = 11;
}
class classTwo:onetwo
{
string item3 = "red";
string item4 = "blue";
}
class Program
{
static void Main(string[] args)
{
classOne numbers = new classOne();
classTwo colors = new classTwo();
List<onetwo> listC1 = new List<onetwo>();
listC1.Add(numbers);
listC1.Add(colors);
foreach (onetwo e in listC1)
{
Console.WriteLine(e);
}
}
}
}
//program output is
//objects_added_to_list.classOne
//objects_added_to_list.classTwo
答案 0 :(得分:3)
您可以为每个类提供ToString
方法的重载:
class classOne:onetwo
{
int item1 = 10;
int item2 = 11;
public override string ToString()
{
return string.Format("item1: {0}, item2: {1}", item1, item2);
}
}
class classTwo:onetwo
{
string item3 = "red";
string item4 = "blue";
public override string ToString()
{
return string.Format("item3: {0}, item4: {1}", item3, item4);
}
}
另一种方法是在基类中提供一个自定义方法,通过反射生成格式化字符串:
class onetwo
{
public virtual string ToPrintableString()
{
return string.Join(", ",
this.GetType()
.GetFields()
.Select(p => p.Name + ": " + p.GetValue(this));
}
}
...
foreach (onetwo e in listC1)
{
Console.WriteLine(e.ToPrintableString());
}
注意这个方法使用反射,所以它不是很快(这就是为什么我没有在ToString
的覆盖中实现它),我不推荐它一般,但它适合你的情况。