2013-07-18 112 views
3

從C#轉換下面一行到VB.Net時,我得到C#到VB.Net轉換問題

表達不產生價值

C#

query.ToList().ForEach(ti => cat.Add(ti)); 

VB.NET

query.ToList().ForEach(Function(ti) cat.Add(ti)) 

C#代碼:

void MainWindow_Loaded(object sender, RoutedEventArgs e) 
{ 
    new DesignerMetadata().Register(); 

    var toolbox = new ToolboxControl(); 
    var cat = new ToolboxCategory("Standard Activities"); 
    var assemblies = new List<Assembly>(); 
    assemblies.Add(typeof(Send).Assembly); 
    assemblies.Add(typeof(Delay).Assembly); 
    assemblies.Add(typeof(ReceiveAndSendReplyFactory).Assembly); 

    var query = from asm in assemblies 
       from type in asm.GetTypes() 
       where type.IsPublic && 
       !type.IsNested && 
       !type.IsAbstract && 
       !type.ContainsGenericParameters && 
       (typeof(Activity).IsAssignableFrom(type) || 
       typeof(IActivityTemplateFactory).IsAssignableFrom(type)) 
       orderby type.Name 
       select new ToolboxItemWrapper(type); 

    query.ToList().ForEach(ti => cat.Add(ti)); 
    toolbox.Categories.Add(cat); 
    Grid.SetColumn(toolbox, 0); 
    Grid.SetRow(toolbox, 1); 
    LayoutGrid.Children.Add(toolbox); 
} 

我想要Vb.net轉換。當我轉換此代碼在vb.net獲取錯誤在query.ToList()。ForEach(函數(ti)cat.Add(ti))這一行.error是表達式不會產生一個值。

轉換VB.NET代碼

Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) 
    Dim metadata = New DesignerMetadata() 
    metadata.Register() 

    'Create the ToolBoxControl 
    Dim toolbox = New ToolboxControl() 

    'Create a collection of category items 
    Dim cat = New ToolboxCategory("Standard Activities") 
    Dim assemblies = New List(Of Assembly)() 
    assemblies.Add(GetType(SendAndReceiveReplyFactory).Assembly) 
    assemblies.Add(GetType(Delay).Assembly) 
    assemblies.Add(GetType(ReceiveAndSendReplyFactory).Assembly) 

    Dim query = _ 
    From asm In assemblies 
    From type In asm.GetTypes() _ 
    Where type.IsPublic AndAlso Not type.IsNested AndAlso Not type.IsAbstract AndAlso Not type.ContainsGenericParameters AndAlso (GetType(Activity).IsAssignableFrom(type) OrElse GetType(IActivityTemplateFactory).IsAssignableFrom(type)) _ 
    Order By type.Name 
    Select New ToolboxItemWrapper(type) 

    query.ToList().ForEach(Function(ti) cat.Add(ti)) 
    toolbox.Categories.Add(cat) 
    Grid.SetColumn(toolbox, 0) 
    Grid.SetRow(toolbox, 1) 
    LayoutGrid.Children.Add(toolbox) 
End Sub 
+2

我編輯了您的問題,使其更清楚地顯示錯誤的位置,您應該嘗試在問題中僅包含相關位信息 – Sayse

回答

13

變化問題的行到一個:

query.ToList().ForEach(Sub(ti) cat.Add(ti)) 

,由於存在對Action<T>Sub(T))和Func<T>Function(t))在一個單獨的語法是必要的VB.NET(但沒有在C#中)。

+0

謝謝。問題解決了。 – user2194838

+3

將答案標記爲正確。它可以幫助其他人。 –