对象列表和标签

时间:2010-04-08 17:39:54

标签: .net generics

我想存储一个对象列表,比如Car类型,但是带有一个额外的'tag'属性,例如一个不属于Car类的布尔值True / False。完成此任务的最佳方法是什么?我需要在方法之间传递结果。

3 个答案:

答案 0 :(得分:2)

您可以使用某种元组,例如Pair<T,U>

以下是一个例子:

namespace TestProject.Utils
{
    public class Pair<T, U>
    {    
        public Pair(T first, U second)
        {
            this.First = first;
            this.Second = second;
        }

        public T First { get; set; }
        public U Second { get; set; }
    }
}

对于C#4,这里有一个关于元组的好读物:CLR Inside Out - Building Tuple

编辑:用法

Car mustang;
List<Pair<Car, bool>> list = new List<Pair<Car, bool>>(); // <Car, isAwesome> pairs..
list.Add(new Pair(mustang, true));

答案 1 :(得分:0)

Dictionary<Car, bool> carFlags = new Dictionary<Car, bool>();

您可以将汽车传入字典并取回布尔旗。

答案 2 :(得分:0)

使用继承,您可以创建一个CarWithTag类来扩展Car类,而不会使用不需要的属性来污染Car类:

public class Car
{
    public string CarInfoEtcetera { get; set; }
}

public class CarWithTag : Car
{
    public string Tag { get; set; }
}

然后,当您需要传递标记信息时,您可以创建一个接受CarWithTag对象的方法。

    private string GetCarTagInfo(CarWithTag car)
    {
        return car.Tag;
    }

现在你可以新建一个CarWithTag对象并将其传递给方法,以及任何Car信息。

        CarWithTag carWithTag = new CarWithTag()
                                    {
                                        Tag = "123abc", 
                                        CarInfoEtcetera = "etc"
                                    };

        string tag = GetCarTagInfo(carWithTag);