2013-03-28 83 views
2

EnumerablePointEnumerator<T>.GetCurrent(ref Point p)Microsoft.Research.DynamicDataDisplay.DataSources)我發現了一個錯誤Unable to cast object of type '<XYPairsInRange>d__8' to type 'IXYPair'.無法投射型「<XYPairsInRange> d__8」爲類型「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語句並沒有成功返回一個列表(無產量)

編輯:XValues和YValues都列出<雙>

調用代碼:

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

什麼是XValues'的'類型? – 2013-03-28 09:56:28

+0

顯示您的調用代碼,請 – Nathan 2013-03-28 09:57:48

回答

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; 
} 
+0

謝謝!修復它 – cguest 2013-03-28 11:15:26

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

+0

謝謝,我也嘗試了自己的代碼,它工作正常,我的問題似乎與DynamicDataDisplay.DataSources EnumerablePointEnumerator .GetCurrent(ref Point p)。你知道爲什麼我會得到一個方法名稱作爲一種類型嗎? – cguest 2013-03-28 10:42:07

+0

問題出在'Query'方法中,請參閱我的答案。 – 2013-03-28 10:57:01

相關問題