它可以转换为特定类型吗?

时间:2013-10-28 07:02:15

标签: c# generics casting constructor

我必须将参数发送到新类的构造函数。我发送的参数是通用的。在构造函数中我必须使用它的一个字段(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;
           }     
        }

    }

如何施展它?或者它没有办法。

我编辑了示例代码。它更好吗?

2 个答案:

答案 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;
    }
}