如何将这个C#lambda翻译成VB.net?

如何将这个C#lambda翻译成VB.net?,c#,vb.net,lambda,hangfire,C#,Vb.net,Lambda,Hangfire,我很难将C#语句翻译成VB。我不知道这是不是一个lambda,我确实使用它,但我不是那个么专业,或者是一个分离器,我对它的了解甚至更少。根据微软的说法,C#可以以这两种不同的方式使用 我遇到麻烦的C代码行是: RecurringJob.AddOrUpdate(() => TextBuffer.WriteLine("text"), Cron.Minutely); 它来自中的Startup.cs文件。这是完整的课程: public void Configuration(IAppBuilder

我很难将C#语句翻译成VB。我不知道这是不是一个lambda,我确实使用它,但我不是那个么专业,或者是一个分离器,我对它的了解甚至更少。根据微软的说法,C#可以以这两种不同的方式使用

我遇到麻烦的C代码行是:

RecurringJob.AddOrUpdate(() => TextBuffer.WriteLine("text"), Cron.Minutely);
它来自中的Startup.cs文件。这是完整的课程:

public void Configuration(IAppBuilder app)
{
    GlobalConfiguration.Configuration.UseSqlServerStorage("DefaultConnection");
    app.UseHangfireDashboard();
    app.UseHangfireServer();
    RecurringJob.AddOrUpdate(
        () => TextBuffer.WriteLine("Recurring Job completed successfully!"), 
        Cron.Minutely);
}

the TextBuffer.WriteLine reference is:

public static void WriteLine(string value)
{
    lock (Buffer)
    {
        Buffer.AppendLine(String.Format("{0} {1}", DateTime.Now, value));
    }
}
这是我尝试过的,但并不准确;我尝试了很多变化:

RecurringJob.AddOrUpdate(Function() TextBuffer.WriteLine("text"), Cron.Minutely)
我在Visual Studio中遇到的语法错误是:

Expression does not produce a value
我查看了AddOrUpdate的定义,看到了以下重载,但我不确定使用哪个选项是正确的,也不确定一旦选择了正确的重载,语法会是什么样子

Public Shared Sub AddOrUpdate(methodCall As Expression(Of Action), cronExpression As Func(Of String), Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(methodCall As Expression(Of Action), cronExpression As String, Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(methodCall As Expression(Of Func(Of Task)), cronExpression As String, Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(methodCall As Expression(Of Func(Of Task)), cronExpression As Func(Of String), Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(recurringJobId As String, methodCall As Expression(Of Action), cronExpression As String, Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(recurringJobId As String, methodCall As Expression(Of Action), cronExpression As Func(Of String), Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(recurringJobId As String, methodCall As Expression(Of Func(Of Task)), cronExpression As String, Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(recurringJobId As String, methodCall As Expression(Of Func(Of Task)), cronExpression As Func(Of String), Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(Of T)(methodCall As Expression(Of Action(Of T)), cronExpression As String, Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(Of T)(methodCall As Expression(Of Action(Of T)), cronExpression As Func(Of String), Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(Of T)(methodCall As Expression(Of Func(Of T, Task)), cronExpression As Func(Of String), Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(Of T)(methodCall As Expression(Of Func(Of T, Task)), cronExpression As String, Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(Of T)(recurringJobId As String, methodCall As Expression(Of Action(Of T)), cronExpression As Func(Of String), Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(Of T)(recurringJobId As String, methodCall As Expression(Of Action(Of T)), cronExpression As String, Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(Of T)(recurringJobId As String, methodCall As Expression(Of Func(Of T, Task)), cronExpression As Func(Of String), Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
Public Shared Sub AddOrUpdate(Of T)(recurringJobId As String, methodCall As Expression(Of Func(Of T, Task)), cronExpression As String, Optional timeZone As TimeZoneInfo = Nothing, Optional queue As String = "default")
我只是不明白这个方法在寻找什么,或者如何正确地编写它。

VB.NET有:
函数
,它返回一个值,而
子函数
,它不返回值

在这种情况下,您希望使用
Sub
,因为表达式不返回值

RecurringJob.AddOrUpdate(Sub() TextBuffer.WriteLine("text"), Cron.Minutely)
VB.NET有:
函数
,它返回一个值;
子函数
,它不返回值

在这种情况下,您希望使用
Sub
,因为表达式不返回值

RecurringJob.AddOrUpdate(Sub() TextBuffer.WriteLine("text"), Cron.Minutely)

在C#中,每个方法都是一个函数,其中不返回类型为
void
的值。在VB中,不返回值的方法是
Subs
,而不是
函数。lambda也是如此,它们只是匿名方法。请注意,最初引入LINQ时,VB不支持操作Lambdas,即
Subs
,而只支持值Lambdas,即
函数
。如果您使用的是不支持action Lambdas的旧版本VB,那么您需要使用命名方法并为此创建一个委托。很好的解释,谢谢。我使用的是VS2017,因此我认为旧版本的警告不适用。在C#中,每个方法都是一个函数,其中不返回类型为
void
的值。在VB中,不返回值的方法是
Subs
,而不是
函数。lambda也是如此,它们只是匿名方法。请注意,最初引入LINQ时,VB不支持操作Lambdas,即
Subs
,而只支持值Lambdas,即
函数
。如果您使用的是不支持action Lambdas的旧版本VB,那么您需要使用命名方法并为此创建一个委托。很好的解释,谢谢。我使用的是VS2017,所以我想旧版本的警告不适用。好吧,我不觉得很糟糕,因为我实际上尝试了你上面写的内容,但我一定有一些小的语法问题-使用你上面的行通过了检查。谢谢我想我有两个右括号,所以我认为我的整行都错了,但我已经非常接近了。你在上面用@jmcillhinney的评论给出的答案为我澄清了一切。今晚我学到了一些新东西。对我来说,学习VB lambda的链接也很好。好吧,我不觉得很糟糕,因为我实际上尝试了你上面写的东西,但我一定有一些小的语法问题-使用你上面的行通过了检查。谢谢我想我有两个右括号,所以我认为我的整行都错了,但我已经非常接近了。你在上面用@jmcillhinney的评论给出的答案为我澄清了一切。今晚我学到了一些新东西。对我来说,学习VB lambda的链接也不错。