将多个类对象添加到单个列表并从对象返回值

时间:2013-09-13 03:13:13

标签: c# list object

我是一名初学者,并为我的问题寻找一个简单的例子但没有成功。我有两个类,并希望将类对象添加到单个列表,然后将类中的值打印到控制台。如果之前已经回答过,我道歉。

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

1 个答案:

答案 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的覆盖中实现它),我不推荐它一般,但它适合你的情况。

相关问题