将C#Lambda转换为VB.NET

时间:2017-07-05 20:31:52

标签: 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;
    }
}

以下是我将代码转换为:

的内容
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.

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

1 个答案:

答案 0 :(得分:9)

  

我正在尝试将以下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);
}