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

本文关键字:对象 列表 返回值 单个 添加 | 更新日期: 2023-09-27 18:31:05

我是初学者,已经搜索了一个简单的例子来解决我的问题,但没有成功。 我有两个类,想将类对象添加到单个列表中,然后将类中的值打印到控制台。如果以前已经回答过这个问题,我深表歉意。

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

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

您可以为每个类提供 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 的覆盖中实现它),我一般不推荐它,但它适用于您的情况。