我必须将参数发送到新类的构造函数。我发送的参数是通用的。在构造函数中我必须使用它的一个字段(id)。但我不能直接使用它,然后我想在使用前投射它。但它说不能将类型T转换为我的特定类型。
例如
public class Pet<T>
{
foodType foodType; // enum
public Pet(T sample)
{
if(sample.GetType() == typeof(Dog)
{
var pet = (Dog)pet; // there is an error.
foodType = FoodType.Milk;
}
if(sample.GetType() == typeof(Cat)
{
var pet = (Cat)pet; // there is an error.
foodType = FoodType.Fish;
}
}
}
如何施展它?或者它没有办法。
我编辑了示例代码。它更好吗?
答案 0 :(得分:3)
您可以使用'where'字样。像这样:
public class Dog<T> where T: IHasId
这意味着T必须从IHasId interfase继承
答案 1 :(得分:2)
你错过了泛型的观点。没有泛型,你可以更好地解决这个问题:
public interface IPetFoodChoice
{
FoodType preferedFoodType { get; }
}
public class Dog : IPetFoodChoice
{
public FoodType preferedFoodType { get { return FoodType.Milk; } }
}
public class Cat : IPetFoodChoice
{
public FoodType preferedFoodType { get { return FoodType.Fish; } }
}
public class Pet
{
private FoodType _foodType;
public Pet(IPetFoodChoice sample)
{
_foodType = sample.preferedFoodType;
}
}