2011-03-09 64 views
0

請也建議我更改.. 不能將類型'System.Collections.Generic.List'隱式轉換爲System.Collections.Generic.IEnumerable'。一個顯式轉換存在(是否缺少強制轉換?)隱式轉換錯誤

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace MyNamespace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<int> eventIDs = new List<int>() { 53,90,344,2223,2225,4497,5512}; 
      MatchNumbers(eventIDs,2200,2300); 

     } 
     public static void MatchNumbers(IEnumerable<uint> eventsSet, int lowerBound, int upperBound) 
     { 
      if (upperBound < lowerBound) 
       throw new Exception("Lower bound cant be bigger"); 
      List<int> itemSet = (List<int>)eventsSet; 
      for (int i = lowerBound; i <= upperBound; i++) 
      { 
       int result = itemSet.BinarySearch(i); 
       if (result >= 0) 
        Console.WriteLine("Found{0}", i); 
      } 
     } 

    } 
} 
+8

編譯器已經找到了你的錯誤。 – BoltClock 2011-03-09 04:26:36

回答

6

請給我建議過的變化..

請執行下列任何一個:

  • 讓你的方法接受的IEnumerable<int>代替IEnumerable<uint>

  • 使用List<uint>而不是List<int>

int表示的32位整數有符號的範圍內,同時uint表示的32位整數無符號範圍。由於值範圍的差異,您不能交換intuint這兩種通用類型的類別。

0

的問題是,你不能施放uintint

+0

這是完全錯誤的;你**可以**將'uint'轉換爲'int'。只有在溢出的情況下,未經檢查的強制轉換不會導致溢出,而​​強制轉換會引發異常。 – BoltClock 2011-03-09 04:34:35

+0

好吧,我應該說他們是不同的類型 - 他們可以被投入對方,但名單和名單是不一樣的。 – Marco 2011-03-09 04:36:58

+0

謝謝你everyone..im一個完整的新手和感謝對我的耐心:) – Krishna 2011-03-09 04:37:21

0
List<uint> itemSet = eventsSet.toList();