C# 通用开放类型列表初始化失败:解决方案
当使用像 Data<T>
这样的通用开放类型及其封闭构造类型(例如 StringData
、DecimalData
)时,尝试使用 List<Data>
创建列表会导致编译器错误:“使用泛型类型‘数据’需要 1 个类型参数。” 这是因为 C# 不支持开放泛型类型的菱形运算符;始终需要具体的类型参数。
问题解释
编译器需要知道 Data<T>
类中的特定类型才能创建列表。 List<Data>
是不明确的;它没有指定 T
代表什么类型。
有效的解决方案
以下是解决此问题的两种实用方法:
接口实现: 创建 IData
及其派生类型实现的接口(例如 Data<T>
)。 然后,将您的列表声明为 List<IData>
。这利用了多态性,允许您在同一列表中存储不同 Data<T>
类型的实例。
抽象基类: 为 DataBase
定义一个抽象基类(例如 Data<T>
)。 从这个基类派生出您的具体类型。 然后您可以创建 List<DataBase>
列表。 这提供了强类型,但与接口方法相比通用性较差。
注意事项
这两种方法都会引入一定程度的设计复杂性。 选择取决于您的应用程序的具体需求。 接口提供了更大的灵活性,而抽象基类提供了更结构化的方法。
延伸阅读
要更深入地了解 C# 中的泛型、方差和多态性,请参阅以下资源:
以上是为什么 C# 中的通用开放类型列表初始化失败?的详细内容。更多信息请关注PHP中文网其他相关文章!