我希望能够做这样的事情来设置网格数据结构。
IReadOnlyList<Point> points;
IReadOnlyList<IReadOnlyList<int>> triangles;
其中三角形是点列表的索引。给定三角形 ''ti'' 的索引,我们可以很容易地找到这些点
IEnumerable<Point> points = triangles[ti].Select(pi=>points[pi])
但是我希望能够定义一个方便的结构
IReadOnlyList<IReadOnlyList<Point>> trianglesAsPoints;
所以我可以
IEnumerable<Point> points = triangles[ti]
这样做的明显方法是创建一个类似 linq 的选择器
IReadOnlyList<T> Select( this IReadOnlyList<U> This
, Func<U,T> selector)
它返回一个实例,其类覆盖以下方法并调用选择器
public interface IReadOnlyList<out T> : IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable
{
// Summary:
// Gets the element at the specified index in the read-only list.
//
// Parameters:
// index:
// The zero-based index of the element to get.
//
// Returns:
// The element at the specified index in the read-only list.
T this[int index] { get; }
}
这种模式的标准库或 nuget 中是否存在这样的工厂?请注意,我不希望 IEnumerable 作为结果,因为我会失去索引能力和 Count 属性,我只想懒惰地转换值,这意味着不 预先将所有值复制到新的列表实例。