2013-04-27 96 views
0

我有2個foreach循環和我試圖將其轉換成一個LINQ的:的foreach到LINQ

Dim result As Type = Nothing 

For Each AssemblyItem As Reflection.Assembly In AppDomain.CurrentDomain.GetAssemblies 
    For Each typeItem As Type In AssemblyItem.GetTypes 
     If myClass.FullName = typeItem.FullName Then 
      result = typeItem 
      Exit For 
     End If 
    Next 

    If Not IsNothing(result) Then 
     Exit For 
    End If 
Next 

目前我有:

result = AppDomain.CurrentDomain.GetAssemblies() 
     .ForEach(Sub(x As Reflection.Assembly) 
        x.GetTypes().ForEach(Sub(t As Type) 
               t.FullName = catalogEntity)) 

我也試圖與另一種方法用沒有運氣:

result = AppDomain.CurrentDomain.GetAssemblies() 
     .Select(Sub(x) x.GetTypes() 
     .Select(Function(y) y.GetType()) 
     .Where(Function(z) z.FullName.Equals(catalogEntity.FullName))).FirstOrDefault() 

但我發現了以下錯誤:

Argument not specified for parameter 'action' of 'Public Shared Sub ForEach(Of T)(array() As T, action As System.Action(Of T))'

任何幫助將不勝感激,提前致謝!

+0

'ForEach'是一個非常不LINQ(就是一個字是什麼?現在)要做的事情。它存在於'List '中,而不是在LINQ擴展方法中。請參閱http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx – 2013-04-27 01:50:19

+0

@TimS。也嘗試了非ForEach方法,但它給了我一個空值 – Luis 2013-04-27 01:55:26

回答

2

這是在VB:

Dim result as Type = AppDomain.CurrentDomain.GetAssemblies().SelectMany(Function(x) x.GetTypes()).FirstOrDefault(Function(x) x.FullName Is myClass.FullName) 

而在C#(我的母語.NET語言):

​​
+0

我知道你的感受,這不是我的本地人,但我現在也使用它...你可以使用[這個工具](http:// www .developerfusion.com/tools/convert/csharp-to-vb /) – Luis 2013-04-27 01:57:41

+0

它的工作順便說一句,非常感謝,完全忘記了'SelectMany' – Luis 2013-04-27 02:00:29