c# - C# 中的 List<T<U>> 其中 T 和 U 是接口(interface)

标签 c# .net generics .net-3.5

好的。所以我目前正在尝试在 C# 中创建一个将接口(interface)作为参数的接口(interface)列表。为了更清楚地说明这一点,让我举个例子:

public interface IPlate<T> where T : IWaffle {}
public interface IWaffles {}

public class BelgiumWaffle : IWaffle {}
public class FalafelWaffle : IWaffle {}
public class HugePlate : IPlate<BelgiumWaffle> {}
public class SmallPlate : IPlate<FalafelWaffle> {}


// Now, I want to do the following:
var plates = new List<IPlate<IWaffle>>();
plates.add(new HugePlate());
plates.add(new SmallPlate());

目标是能够将 IPlate 对象列表序列化为 XML。我希望使用泛型来执行此操作,但我不断收到错误消息,告诉我在尝试添加时存在一些参数错误(又名 - 类型不匹配)。只是不确定我在这里做错了什么。这对我来说似乎是对的,但我一定遗漏了一些东西(显然)。

更新:我应该提一下,这是 .NET v3.5

更新:抱歉!写有关 Plate 类定义的问题时出现一些错别字。

最佳答案

我认为你应该使用协方差(.NET 4.0)

public interface IPlate<out T> where T : IWaffle {}

并将IPancake替换为IWaffle

var plates = new List<IPlate<IPancake>>();

关于c# - C# 中的 List<T<U>> 其中 T 和 U 是接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13070160/

相关文章:

.net - 是否安装了 .NET 版本的 DSC 资源?

c++ - 具有函数类型参数的模板导致编译器错误

generics - Scala方法,其中第二个参数的类型等于第一个参数的泛型类型的一部分

c# - Bit-Framework如何实现不同项目的模块化依赖注册?

java - 在 “Integer cannot be converted to E[]”中遇到错误,但在其他地方可以使用?

c# - 了解整数上单个与号运算符 (&) 的行为

c# - 如何测试按位枚举是否包含 C# 中另一个按位枚举的任何值?

c# - 解析 Postman 中的日期对象以转换为 C# DateTime

c# - ASP vNext 和 PostgreSql

c# - Asp.net 项目依赖问题(分别构建每一层)