2017-07-05 17 views
0

次のC#コードをVB.NETに変換しようとしています。問題はラムダ式にあります。C#ラムダをVB.NETに変換する

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 expression cannot be converted to 'DataContext' because 'DataContext' is not a delegate type.

を与えますここで間違っている?

+2

を書くだけの短い方法です。それは表現体のプロパティです。 – PetSerAl

答えて

8

次のC#コードをVB.NETに変換しようとしています。問題はラムダ式にあります。

問題は、ラムダの式付きのプロパティと間違っていることです。 C#の

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

は、それがすべてではありませんラムダ

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

を書くの短い方法です。これをVBに変換したいのであれば、通常のVBプロパティゲッターを書くだけです。 C#はあなたが同様の方法でこのトリックを行うことができます

注:

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

はそれがラムダではありません

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

私はそれを知らなかった。ありがとうございました! –

関連する問題