我试图将以下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.
有谁能告诉我这里我做错了什么?
答案 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);
}