我有以下继承IEnumerable的类
public class LinesEnumerable : IEnumerable<Point>
{
protected readonly IPointSeries _pointSeries;
protected readonly ICoordinateCalculator<double> _xCoordinateCalculator;
protected readonly ICoordinateCalculator<double> _yCoordinateCalculator;
protected readonly bool _isDigitalLine;
/// <summary>
/// Initializes a new instance of the <see cref="LinesEnumerable" /> class.
/// </summary>
/// <param name="pointSeries">The point series.</param>
/// <param name="xCoordinateCalculator">The x coordinate calculator.</param>
/// <param name="yCoordinateCalculator">The y coordinate calculator.</param>
/// <param name="isDigitalLine">if set to <c>true</c> return a digital line .</param>
public LinesEnumerable(IPointSeries pointSeries, ICoordinateCalculator<double> xCoordinateCalculator, ICoordinateCalculator<double> yCoordinateCalculator, bool isDigitalLine)
{
_pointSeries = pointSeries;
_xCoordinateCalculator = xCoordinateCalculator;
_yCoordinateCalculator = yCoordinateCalculator;
_isDigitalLine = isDigitalLine;
}
/// <summary>
/// Returns an enumerator that iterates through a collection.
/// </summary>
/// <returns>
/// An <see cref="T:System.Collections.IEnumerator" /> object that can be used to iterate through the collection.
/// </returns>
public virtual IEnumerator<Point> GetEnumerator()
{
return _isDigitalLine ?
(IEnumerator<Point>)new DigitalLinesIterator(_pointSeries, _xCoordinateCalculator, _yCoordinateCalculator) :
new LinesIterator(_pointSeries, _xCoordinateCalculator, _yCoordinateCalculator);
}
/// <summary>
/// Returns an enumerator that iterates through a collection.
/// </summary>
/// <returns>
/// An <see cref="T:System.Collections.IEnumerator" /> object that can be used to iterate through the collection.
/// </returns>
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试执行以下操作时:
linesEnumerable = linesEnumerable.Concat(new[] { new Point(viewportWidth, lastYCoordinate) });
Run Code Online (Sandbox Code Playgroud)
它说'System.Collections.IEnumerable'不包含'Concat'的定义,最佳扩展方法重载'System.Linq.Queryable.Concat(System.Linq.IQueryable,System.Collections.Generic.IEnumerable)'具有一些无效的论点
我已经添加了System.Linq命名空间
有人知道为什么会这样吗?
xr2*_*0xr 13
当两个集合的类型不同时,编译器将给出此错误T。例如:
List<int> l1 = new List<int>();
List<string> l2 = new List<string>();
var l3 = l1.Concat(l2);
var l4 = l1.Union(l2);
Run Code Online (Sandbox Code Playgroud)
在Concat和Union通话将分别导致以下编译时错误:
“列表”不包含“Concat”的定义,最佳扩展方法重载“Queryable.Concat(IQueryable, IEnumerable)”需要“IQueryable”类型的接收器
“List”不包含“Union”的定义,最佳扩展方法重载“Queryable.Union(IQueryable, IEnumerable)”需要“IQueryable”类型的接收器
这是令人困惑的,因为该消息具有误导性,并且 VS 智能感知识别扩展方法。解决方案是,l1并且l2必须是相同类型的列表T。
好的,这对您无济于事,但是当您搜索该错误时,此问题是最高的结果,所以我要说我的问题是什么。
我有以下课程:
class Group
class Row : Group
class Column : Group
Run Code Online (Sandbox Code Playgroud)
我试图调用上的毗连IEnumerable<Row>用IEnumerable<Column>得到的IEnumerable<Group>。这不起作用,因为您无法将列转换为行。解决的办法是投我IEnumerable<Row>来IEnumerable<Group>。
例如 rows.Cast<Group>().Concat(columns)