将属性设置为泛型参数

时间:2014-07-25 06:34:52

标签: c# .net generics

我有两个课程CarTruck,他们都扩展了我的Vehicle课程。 CarTruck都具有如下属性:

public int Wheels { get; set; }

现在,我有两个方法将Wheels属性设置为某个变量。它看起来像这样:

public void SetCarWheels(int value)
{
     Car.Wheels = value;
}

public void SetTruckWheels(int value)
{
     Truck.Wheels = value;
}

因为方法做同样的事情,我想创建一个输入参数类型为Vehicle的方法。该方法基本上应该这样做:

public static void SetWheels<T>(Vehicle item, int wheels) where T : Vehicle
    {
        if (item!= null)
        {
            item.Wheels = wheels;
        }
    }

问题是,它无法识别Wheels属性。

如何使用泛型来解决这个问题?

请不要在没有泛型的情况下建议替代解决方案(我知道CarTruck可以有一个const值的轮子,但是为了解决这个问题,让我们离开因为它是。)

1 个答案:

答案 0 :(得分:3)

只有当属性是Vehicle基类中的实例属性时,您的代码才有效:

public class Vehicle
{
    public int Wheels { get; set; }
}

此外,在您的方法中,您似乎不使用泛型类型参数和变量:

public static void SetWheels<T>(T item, int wheels) where T : Vehicle
{
    if (item != null)
    {
        item.Wheels = wheels;
    }
}