gpt4 book ai didi

c# - 变体和开放泛型 IReadOnlyList

转载 作者:可可西里 更新时间:2023-11-01 07:56:51 25 4
gpt4 key购买 nike

我试图理解为什么 C# 中有关变体和泛型的特定行为无法编译。

class Matrix<TLine> where TLine : ILine
{
TLine[] _lines;

IReadOnlyList<ILine> Lines { get { return _lines; } } //does not compile
IReadOnlyList<TLine> Lines { get { return _lines; } } //compile
}

我不明白为什么这不起作用:

  • _lines , 属于 TLine[] 类型, 工具 IReadOnlyList<TLine>
  • IReadOnlyList<out T>是一个变体通用接口(interface),这意味着,据我所知,任何实现 IReadOnlyList<TLine> 的东西可以用作 IReadOnlyList<ILine>

感觉一定是没有考虑类型约束,但是我怀疑。

最佳答案

您只需要将class 约束添加到TLine:

class Matrix<TLine> where TLine : class, ILine

这将确保 TLine 是一个引用类型——然后允许泛型变体起作用。变体适用于引用类型,因为这样 CLR 就知道 TLine 类型的值可以用作 ILine 类型的值,而无需任何装箱或其他表示形式的变化。

关于c# - 变体和开放泛型 IReadOnlyList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41503887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com