2

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< double > です

呼び出しコード:

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

2 に答える 2

0

私はあなたのコードを試してみましたが、問題なく動作するようです:

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

class XYPair : IXYPair {
    public double X { get; set; }
    public double Y { get; set; }

    public override string ToString( ) {
        return string.Format( "X = {0} ; Y = {1}", X, Y );
    }
}

class Program {
    static List<double> XValues;
    static List<double> YValues;

    static void Main( string[ ] args ) {
        XValues = new List<double>( ) { 0.05, 0.25, 0.85, 0.95, 0.35, 1.65, 115.25 };
        YValues = new List<double>( ) { 0.25, 0.85, 1.15, 12.95, 7.35, 1.75, 0.13 };

        foreach ( IXYPair pair in XYPairsInRange( 0.5, 1.5 ) )
            Console.WriteLine( pair.ToString() );
    }

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

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

結果:

X = 0.85; Y = 1.15
X = 0.95 ; Y = 12.95

于 2013-03-28T10:22:07.737 に答える
0

問題は、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;
}
于 2013-03-28T10:55:28.720 に答える