c# - 无法将类型为 '<XYPairsInRange>d__8' 的对象转换为类型 'IXYPair'

标签 c# c#-4.0

EnumerablePointEnumerator<T>.GetCurrent(ref Point p) ( Microsoft.Research.DynamicDataDisplay.DataSources ) 我收到一个错误 Unable to cast object of type '<XYPairsInRange>d__8' to type 'IXYPair'.

XYPairsInRange 不是一个类型,而是我类的一个方法,返回类型为 IEnumerable

public IEnumerable<IXYPair> XYPairsInRange(double startX, double endX)
{
   foreach (IXYPair pair in this.XYPairs)
   {
      if (pair.X >= startX && pair.X <= endX)
      {
         yield return pair;
      }
   }
}

public IEnumerable<IXYPair> XYPairs
{
   get
   {
       int counter = 0;
       foreach (double x in XValues)
       {
          yield return new XYPair() { X = x, Y = YValues[counter++] };
       }
   }
}

IXYPair 定义为

public interface IXYPair
{
    double X { get; }
    double Y { get; }
}

在运行时可能会导致此错误的原因是什么?我已经尝试显式转换 yield return 语句并返回一个列表(没有 yield)但没有成功

编辑:XValues 和 YValues 都是 List

调用代码:

public IEnumerable Query()
    {
        yield return this.Data.XYPairsInRange(Double.NegativeInfinity, Double.PositiveInfinity);
    }

最佳答案

问题是您从 Query() 方法中生成一个枚举器,而不是枚举器中的项目:

这个:

public IEnumerable Query()
{
    yield return this.Data.XYPairsInRange(Double.NegativeInfinity, Double.PositiveInfinity);
}

可以重写如下:

public IEnumerable<IEnumerable<IXYPair>> Query()

现在您应该找出为什么这不起作用。

您应该将方法的主体重写为:

public IEnumerable<IXYPair> Query()
{
    return this.Data.XYPairsInRange(...);
}

或对此(以上优先):

public IEnumerable<IXYPair> Query()
{
    foreach (var pair in this.Data.XYPairsInRange(...))
        yield return pair;
}

关于c# - 无法将类型为 '<XYPairsInRange>d__8' 的对象转换为类型 'IXYPair',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15678714/

相关文章:

javascript - 在winforms webbrowser控件中调用href点击事件JavaScript

c# - C# 中的等效 C 代码。 (uint8_t *) 强制转换?

.net - System.Net.Caching.HttpRequestCachePolicy 和 CloudBlob.FetchAttributes 之间的冲突

c# - WCF 4.0 - 从 URL 或 POST 主体获取参数

.net - 如何使用 MSBuild 搜索目录结构并获取 .sln 文件名

c# - 如何处理从06 :00 and ends at 30:00开始的一天

c# - 将多个文件/文件夹从 Windows 资源管理器传递到外部应用程序

c# - Azure函数: configure blob trigger only for new events

c#-4.0 - 覆盖 Outlook 的默认发送功能

c# - System.Windows.Forms.Timer 是否在与 UI 不同的线程上运行?