2013-05-31 97 views
2

所有我作爲鑄造使用ArrayList的在.NET4.5

public static Dictionary<T, int> CountOccurences<T>(IEnumerable<T> items) { ... } 

我有一個不幸的是使用ArrayList!而非List<T>一些遺留代碼定義一個實用的方法。現在,我需要轉換ArrayList使用上述方法,並且以下兩種應該工作

var v = CountOccurences<String>(arrayList.Cast<String>().ToArray()); 

var v = CountOccurences<String>(arrayList.OfType<String>().ToArray()); 

無論在VS2012這些工作在.NET 4.5中給

'System.Collections.ArrayList'不包含'OfType'的定義,也沒有接受'System.Collectio'類型的第一個參數的擴展方法'OfType' ns.ArrayList」可以找到(是否缺少using指令或程序集引用?)

不過,我已經在LINQpad測試這一點,他們都工作爲什麼我不能投我的ArrayList

謝謝你的時間。

+3

請告訴我錯誤消息:你可以通過創建CountOccurences新的非泛型重載這需要一個ArrayList繞過這個問題? –

+4

arrayList.Cast ()是一個IEnumerable ,你不需要調用ToArray –

+1

沒有實際的錯誤信息,我只能猜測,但你使用System.Linq命名空間? – Dirk

回答

4

罰款,我下面的作品在VS2012

 ArrayList al = new ArrayList(); 

     al.Add("a"); 
     al.Add("b"); 
     al.Add("c"); 

     var v = al.OfType<string>().ToArray(); 

     var list = new List<string>(v); //Constructor taking an IEnumerable<string>(); 

,你收到了什麼錯誤消息。

確保您包括下面的命名空間

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Linq; 
+1

缺少對Linq的引用。絕對的恥辱。我把我的頭埋在恥辱... – MoonKnight

+0

+1然後請:) –

1

在我的情況不拋出任何錯誤:

順便說一句,你的OfType<T>用法是錯誤的。這是一種方法,所以附加()

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

namespace _16853758 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ArrayList arrayList = new ArrayList(); 

      var a = CountOccurences<String>(arrayList.Cast<String>().ToArray()); 
      var v = CountOccurences<String>(arrayList.OfType<String>().ToArray()); 
     } 

     public static Dictionary<T, int> CountOccurences<T>(IEnumerable<T> items) { return new Dictionary<T, int>(); } 
    } 
} 
3

我假設「不工作」意味着你得到一個InvalidCastException。因此,不是ArrayList中的所有對象都是字符串。

(假設方法的功能)

public static Dictionary<string, int> CountOccurences(ArrayList items) 
{ 
    var dict = new Dictionary<string, int>(); 
    foreach(object t in items) 
    { 
     string key = ""; 
     if(t != null) 
      key = t.ToString(); 
     int count; 
     dict.TryGetValue(key, out count); 
     dict[key] = count++; 
    } 
    return dict; 
}