0

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

    }

怎么投呢?或者它没有办法。

我已经编辑了示例代码。好点吗?

4

2 回答 2

3

你可以使用“哪里”这个词。像这样:

public class Dog<T> where T: IHasId

这意味着 T 必须从 IHasId 接口继承

于 2013-10-28T07:17:08.960 回答
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;
    }
}
于 2013-10-28T07:51:19.720 回答