我在转换泛型类型时遇到问题。
例如我有类(class):
public class Dog
{
}
public class Husky : Dog
{
}
public class MyWrapper<T> where T : class
{
}
然后我想做这样的事情,但我不知道怎么做
MyWrapper<Husky> husky = new MyWrapper<Husky>();
List<MyWrapper<Dog>> dogs= new List<MyWrapper<Dog>>();
dogs.Add(husky); // how to cast husky to MyWrapper<Dog>?
编辑:已更改 Animal<T>
至 MyWrapper<T>
, 所以这将是更充分的例子
最佳答案
您可以使用 generic covariance C# 4 或更高版本中的接口(interface)。为此,您需要定义协变接口(interface)(使用 out
)并让 MyWrapper
实现该接口(interface):
public class Dog
{
}
public class Husky : Dog
{
}
public class MyWrapper<T> : IMyWrapper<T> where T : class
{
}
public interface IMyWrapper<out T> where T : class
{
}
然后你可以这样做:
var husky = new MyWrapper<Husky>();
var dogs = new List<IMyWrapper<Dog>>();
dogs.Add(husky);
关于c# - 在 C# 中转换泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14475734/