将C#Lambda转换为VB.NET

Jun*_*ang 0 c# vb.net lambda

我正在尝试将以下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;
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我将代码转换为:

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
Run Code Online (Sandbox Code Playgroud)

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

谁能告诉我这里我做错了什么?

Eri*_*ert 9

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

问题在于你误认为lambda的表达式属性.

在C#中

protected DataContext Db => _db ?? (_db = _databaseFactory.GetDataContext());
Run Code Online (Sandbox Code Playgroud)

是一种简短的写作方式

protected DataContext Db { 
  get 
  {
    return _db ?? (_db = _databaseFactory.GetDataContext());
  }
}
Run Code Online (Sandbox Code Playgroud)

它根本不是一个lambda; 如果你想将它翻译成VB,只需编写一个普通的VB属性getter.

请注意,C#允许您使用方法执行此操作:

public Abc Foo(Bar bar) => Blah(bar);
Run Code Online (Sandbox Code Playgroud)

只是一种简短的写作方式

public Abc Foo(Bar bar) 
{
  return Blah(bar);
}
Run Code Online (Sandbox Code Playgroud)