繁体   English   中英

将C#Lambda转换为VB.NET

[英]Converting C# Lambda to VB.NET

我正在尝试将以下C#代码转换为VB.NET。 问题在于lambda表达式。

public class UserStore
{
    private readonly IDatabaseFactory _databaseFactory;

    private DataContext _db;
    protected DataContext Db => _db ?? (_db = _databaseFactory.GetDataContext());

    public UserStore(IDatabaseFactory databaseFactory)
    {
        _databaseFactory = databaseFactory;
    }
}

以下是我将代码转换为的内容:

Public Class UserStore
    Private ReadOnly _databaseFactory As IDatabaseFactory

    Private _db As DataContext
    Protected Db As DataContext = Function() As DataContext
                                     If _db Is Nothing Then
                                         _db = _databaseFactory.GetDataContext()
                                     End If
                                     Return _db
                                  End Function

    Public Sub New(databaseFactory As IDatabaseFactory)
        _databaseFactory = databaseFactory
    End Sub
End Class

由于某种原因,转换后的lambda会给出错误Lambda expression cannot be converted to 'DataContext' because 'DataContext' is not a delegate type.

有人可以告诉我我在做什么错吗?

我正在尝试将以下C#代码转换为VB.NET。 问题在于lambda表达式。

问题是您将表达式健全的属性误认为是lambda。

在C#中

protected DataContext Db => _db ?? (_db = _databaseFactory.GetDataContext());

是一种简短的写作方式

protected DataContext Db { 
  get 
  {
    return _db ?? (_db = _databaseFactory.GetDataContext());
  }
}

根本不是lambda。 如果要将其转换为VB,只需编写一个普通的VB属性getter。

请注意,C#还允许您使用方法来完成此技巧:

public Abc Foo(Bar bar) => Blah(bar);

只是一种简短的写作方式

public Abc Foo(Bar bar) 
{
  return Blah(bar);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM