2013-07-18 3 views
3

при преобразовании следующую строку из C# в VB.Net яC# для выпуска преобразования VB.Net

Expression не дает значение

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 (Function (ti) cat.Add (ti)) эта строка .error is Expression не дает значения.

Старинное 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

Отметьте ответ как правильный. Это может помочь другим. –