c# - 在 C# 中转换泛型类

标签 c# generics casting

我在转换泛型类型时遇到问题。

例如我有类(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/

相关文章:

c# - 如何将泛型方法限制为具有指定属性的类?

java - 如何正确实现通配符参数?

c++ - 通用 vector 类中的重载解析问题

swift - 如何使用 Swift 中的 where 检查/将类转换为泛型类型

Java 类型转换问题

c# - 如何设计与 secret 文件管理相关的领域模型?

c# - MVC 3 - 如何在异步 WCF 调用后立即 RedirectToAction

c# - 为什么 Resharper 在这里给我一个 'Localizable Interpolated String' 提示?

java - Java中ClassCastException的解释

c# - Entity Framework ICollection 创建内表