Созданные компилятором MemberMemberBinding и ListBinding - PullRequest
0 голосов
/ 01 апреля 2019

Как описано здесь , в C # используются классы, подобные следующим:

public class Node {
    public NodeData Data { get; set; } = new NodeData();
    public List<Node> Children { get; set; } = new List<Node>() { null };
}

public class NodeData {
    public string Name { get; set; }
}

возможно генерировать деревья выражений (используя компилятор), которые имеют экземпляр MemberMemberBinding :

Expression<Func<Node>> expr = () => new Node() {
    Data = {
        Name = "hello world"
    }
};

или MemberListBinding :

Expression<Func<Node>> expr1 = () => new Node() {
    Children = {
        new Node(), new Node()
    }
};

При попытке сделать то же самое в VB.NET код не компилируется; ни код MemberMemberBinding , ни код ListBinding :

Class Node
    Property Data As NodeData = New NodeData
    Property Children As List(Of Node) = New List(Of Node)
End Class
Class NodeData
    Property Name As String
End Class

' Compiler error -- Expression cannot be converted to expression tree
' When assigning to Func(Of Node) instead of Expression -- Name is not a member of Node
Dim expr As Expression(Of Func(Of Node)) = Function() New Node With {
    .Data = {
        .Name = "abcd"
    }
}

' Compiler error -- value of type Node() cannot be converted to List(Of Node)
Dim expr1 As Expression(Of Func(Of Node)) = Function() New Node With {
    .Children = {
        New Node, New Node
    }
}

Есть ли способ заставить компилятор VB.NET генерировать MemberMemberBinding и MemberListBinding экземпляров?

...