В чем причина этого сбоя преобразования кода?

Я использую преобразователь кода телерика, чтобы попытаться преобразовать этот код VB в C#:

''' <summary>
''' Return the name of a property, field, or local variable from a lambda expression.
''' </summary>
''' <typeparam name="T">Type of the property, field, or local variable.</typeparam>
''' <param name="expr">A lambda expression that refers to a property, field, or local variable, in the
''' form: '() => Class.Property' or '() => object.Property'.</param>
''' <returns>The name of the property represented by the provided lambda expression.</returns>
Friend Function GetMemberName(Of T)(expr As System.Linq.Expressions.Expression(Of Func(Of T))) As String
    Dim memberExpr As System.Linq.Expressions.MemberExpression = TryCast(expr.Body, System.Linq.Expressions.MemberExpression)

    If memberExpr Is Nothing Then _
        Throw New ArgumentOutOfRangeException("The argument must be a lambda expression in the form: " &
        "'() => Class.Member', '() => object.Member', or '() => fieldOrLocal'")

    Const VBLocalPrefix = "$VB$Local_" 'odd prefix in $VB$ for local variable member names.
    GetMemberName = memberExpr.Member.Name
    If (GetMemberName.StartsWith(VBLocalPrefix)) Then GetMemberName = GetMemberName.Substring(VBLocalPrefix.Length)
End Function

Я получаю это сообщение об ошибке в области вывода:

ОШИБКА ПРЕОБРАЗОВАНИЯ: код не может быть преобразован. Подробности:

-- строка 8, столбец 8: неверный NonModuleDeclaration

Проверьте наличие ошибок в исходном коде и повторите попытку.

Я погуглил телерик "invalid NonModuleDeclaration" и "invalid NonModuleDeclaration" и просмотрел результаты, но все они по существу дают работу -rounds (т.е. отвечающая сторона говорит "вот преобразование, которое я сделал вручную для вас") и не объясняйте, что вызывает сбой или как его избежать.

Я знаю, что могу понять, как вручную преобразовать код, но мой вопрос: почему конвертер не может преобразовать этот код?


person rory.ap    schedule 26.05.2016    source источник
comment
Я получаю ошибку в строке 8, столбце 8, то есть, если я не ошибаюсь, в этой части: System.Linq.Expressions.Expression(Of Func(Of T)).   -  person Visual Vincent    schedule 26.05.2016
comment
Плохо, я удалил XML-документы, чтобы попытаться выяснить, была ли причина в этом, а также в коде были отступы - и я скопировал оттуда вывод. Я получаю ту же строку/столбец, когда возвращаю ее (обновляется).   -  person rory.ap    schedule 26.05.2016


Ответы (1)


Я нашел проблему! Это связано с этой строкой:

Throw New ArgumentOutOfRangeException("The argument must be a lambda expression in the form: " &
    "'() => Class.Member', '() => object.Member', or '() => fieldOrLocal'")

Возможно, конвертер не обновлен, но добавление подчеркивания после амперсанда устраняет проблему, и теперь код успешно преобразован:

Throw New ArgumentOutOfRangeException("The argument must be a lambda expression in the form: " & _
    "'() => Class.Member', '() => object.Member', or '() => fieldOrLocal'")
person Visual Vincent    schedule 26.05.2016
comment
@roryap: Нет проблем! Рад, что смог помочь. - person Visual Vincent; 26.05.2016