C# 到 VB.Net 的转换问题

标签 c# vb.net visual-studio-2010 c#-to-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(Function(ti) cat.Add(ti)) 这一行中出现错误。错误是表达式不产生值。

转换后的 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

最佳答案

将有问题的行更改为那一行:

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

这是必要的,因为 Action<T> 有一个单独的语法( Sub(T) ) 和 Func<T> ( Function(t) ) 在 VB.NET 中(但在 C# 中没有)。

关于C# 到 VB.Net 的转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17716063/

相关文章:

c# - Twitter API 应用程序专用身份验证(使用 linq2twitter)

c# - 在 OSX : "No assembly containing System.Object was found" 上使用 .NET Core 从代码调用 Roslyn

c# - 需要初始化对象的新实例

vb.net - 如何为 .NET 网站存储应用程序消息

visual-studio-2010 - 有没有一种方法可以在Visual Studio中模拟Sublime Text的“多个光标”功能?

c# - 为什么我得到 AutoMapper int 到 int[] 数组的异常

c# - 使用命令提示符以静默模式运行 exe 文件

c# - 如何通过仅发送类的名称而不是类本身作为参数来获取类的类型?

c# - Visual Studio 2010 扩展智能标记功能

c# - 在不安装 .net 客户端配置文件的情况下运行 .net 应用程序?