我正在尝试将以下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.
谁能告诉我这里我做错了什么?
我正在尝试将以下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)
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |