2016-05-26 17 views
2

私はC#1に、このVBコードを変換しようとするthe telerik code converterを使用しています:このコード変換に失敗した理由は何ですか?

''' <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

は私が得ることは、このラインによるものです私が間違っていないならば、この部分: 'System.Linq.Expressions.Expression(Of Func(Of T))'である行8、列8のエラー。 –

+0

私は悪いですが、XML文書を削除して、それが理由であったのか、コードにインデントがあるのか​​を確認しようとしました。そして、その出力をコピーしました。私はそれを元に戻す(更新した)ときに同じ行/行を得る。 –

答えて

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:問題ありません!お役に立てて嬉しいです。 –

関連する問題