2013-07-18 114 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

将答案标记为正确。它可以帮助其他人。 –