C# 无法将我的矩阵类型强制转换为IEnumerable<;IEnumerable<;浮动>&燃气轮机;

C# 无法将我的矩阵类型强制转换为IEnumerable<;IEnumerable<;浮动>&燃气轮机;,c#,ienumerable,C#,Ienumerable,我有一个矩阵类,它具有以下特征: public partial struct Matrix : IEnumerable<Vector>, IEquatable<Matrix> { ... } 公共部分结构矩阵:IEnumerable,IEquatable{…} 然后,类似地,我有一个向量类: public partial struct Vector : IEnumerable<float>, IEquatable<Vector> { ... }

我有一个矩阵类,它具有以下特征:

public partial struct Matrix : IEnumerable<Vector>, IEquatable<Matrix> { ... }
公共部分结构矩阵:IEnumerable,IEquatable{…} 然后,类似地,我有一个向量类:

public partial struct Vector : IEnumerable<float>, IEquatable<Vector> { ... }
公共部分结构向量:IEnumerable,IEquatable{…} 因此,在代码的其他地方,我有:

Matrix matrix = new Matrix();
IEnumerable<IEnumerable<float>> floatEnumerationEnumeration = matrix;
矩阵=新矩阵();
IEnumerable floatEnumerationEnumeration=矩阵;
但它无法编译,表示无法将
矩阵
转换为
IEnumerable


但是我看不出为什么不呢?

Matrix
实现了
IEnumerable
,但没有
IEnumerable
。要么让它实现
IEnumerable
,要么将其转换为正确的类型:

IEnumerable<IEnumerable<float>> floatEnumerationEnumeration =
    matrix.Cast<IEnumerable<float>>();
现在让我们假设这是允许的:

List<Student> students = new List<Student>();

List<Person> persons = students;
persons.Add(new Person()); // Oops!
List students=newlist();
列出人员=学生;
persons.Add(newperson());//哎呀!
基础列表仍然是学生列表,它不允许您添加类型为
Person
的对象


好的,你的例子是不同的,如果你知道类型是如何实现的,它应该可以工作。但是C#只看到抽象语法结构,并且知道类型真正要做什么。编译器不能说:“好的
IEnumerable
没有
Add
方法,因此不会发生此问题”。因此,泛型类型不能自动成为共变型或逆变型。

我认为这是一个类似的问题
List<Student> students = new List<Student>();

List<Person> persons = students;
persons.Add(new Person()); // Oops!