c# - 如何将此 C# lambda 转换为 VB.net?
问题描述
我很难将 C# 语句翻译成 VB。我不知道这是否是我使用的 lambda,但我不是那个专家,或者是分隔符,我对它的了解更少。根据 Microsoft 的说法,C# '=>' 符号可以以这两种不同的方式使用。
我遇到问题的 C# 代码行是:
RecurringJob.AddOrUpdate(() => TextBuffer.WriteLine("text"), Cron.Minutely);
它来自示例 hangfire.mvcApplication 项目中的 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 有两个不同的 lambda 表达式:Function
,它返回一个值,而Sub
,它不。
在这种情况下,您要使用Sub
,因为您的表达式不返回值。
RecurringJob.AddOrUpdate(Sub() TextBuffer.WriteLine("text"), Cron.Minutely)
推荐阅读
- c# - Linux/MacOS 上的 C# 绝对文件路径
- html - 单击播放按钮时歌曲未播放
- python - 如何使用 sqlite3 删除数据库中的关键字及其旁边的所有内容
- datastage - 我如何将昨天的值设置为 datastage 中数字参数的默认值?
- react-native - 世博会相机暂停和恢复视频录制
- r - 连接到 Google Analytics API 时 R 中的错误(curl 中的错误,已达到超时)
- amazon-web-services - (InvalidParameterValueException) 调用 CreateFunction 操作时:为函数定义的角色不能由 Lambda 承担
- javascript - 数组映射始终不是函数
- excel - Excel 宏 - 将工作表导出为单独的 .CSV 文件
- javascript - 我在哪里将切片添加到最终的 javascript 字符串?