2016-05-26 4 views
2

Я использую the telerik code converter, чтобы попытаться преобразовать этот 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 

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

CONVERSION ERROR: Code could not be converted. Details:

-- line 8 col 8: invalid NonModuleDeclaration

Please check for any errors in the original code and try again.

Googled telerik "invalid NonModuleDeclaration" Я и "invalid NonModuleDeclaration" и пересматривают результаты, но все они в основном обеспечивают работу (то есть ответная сторона говорит: «Здесь выполняется преобразование, которое я сделал вручную для вас), и не объясняю, что вызывает отказ или как его избежать.

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

+0

Я получаю ошибка в строке 8, столбец 8 - которая, если не ошибаюсь, эта часть: 'System.Linq.Expressions.Expression (Of Func (Of T)). –

+0

Неплохо, я удалил XML-документы, чтобы попытаться выяснить, была ли это причина, а также код имел отступы - и я скопировал вывод из этого. Я получаю ту же строку/col, когда я возвращаю ее (обновляется). –

ответ

3

Я нашел проблему! Именно благодаря этой линии:

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'") 
+0

Отличная работа! Благодаря! –

+0

@roryap: Без проблем! Рад, что смог помочь. –

Смежные вопросы