我有两个课程Car
和Truck
,他们都扩展了我的Vehicle
课程。 Car
和Truck
都具有如下属性:
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
属性。
如何使用泛型来解决这个问题?
请不要在没有泛型的情况下建议替代解决方案(我知道Car
和Truck
可以有一个const值的轮子,但是为了解决这个问题,让我们离开因为它是。)
答案 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;
}
}