2017-07-05 2 views
0

Ich versuche, den folgenden C# -Code zu VB.NET zu konvertieren. Das Problem ist mit dem Lambda-Ausdruck.Konvertieren von C# Lambda zu 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; 
    } 
} 

Das folgende ist, was ich den Code konvertiert haben:

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 

Aus irgendeinem Grund gibt das umgewandelte Lambda den Fehler Lambda expression cannot be converted to 'DataContext' because 'DataContext' is not a delegate type.

Kann jemand mir sagen, was ich tue falsch hier?

+2

des Schreibens es nicht Lambda ist. Es ist ausdruckstarke Eigenschaft. – PetSerAl

Antwort

8

Ich versuche, den folgenden C# -Code in VB.NET zu konvertieren. Das Problem ist mit dem Lambda-Ausdruck.

Das Problem ist, dass Sie eine ausdrucksbasierte Eigenschaft für ein Lambda verwechselt haben.

In C#

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

ist ein kurzer Weg des Schreibens

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

Es ist kein Lambda überhaupt; Wenn Sie dies in VB übersetzen möchten, schreiben Sie einfach einen normalen VB-Getter.

Beachten Sie, dass C# Sie diesen Trick mit Methoden auch tun können:

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

ist nur ein kurzer Weg

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

Ich war mir dessen nicht bewusst. Vielen Dank! –