C# 此代码转换失败的原因是什么?

C# 此代码转换失败的原因是什么?,c#,vb.net,telerik,code-conversion,vb.net-to-c#,C#,Vb.net,Telerik,Code Conversion,Vb.net To C#,我正在使用尝试将此VB代码转换为C#: “” ''从lambda表达式返回属性、字段或局部变量的名称。 ''' “”属性、字段或局部变量的类型。 ''一个lambda表达式,它引用 ''form:'()=>Class.Property'或'()=>object.Property'。 ''由提供的lambda表达式表示的属性的名称。 友元函数GetMemberName(Of T)(expr为System.Linq.Expressions.Expression(Of Func(Of T)))为字符

我正在使用尝试将此VB代码转换为C#:

“”
''从lambda表达式返回属性、字段或局部变量的名称。
''' 
“”属性、字段或局部变量的类型。
''一个lambda表达式,它引用
''form:'()=>Class.Property'或'()=>object.Property'。
''由提供的lambda表达式表示的属性的名称。
友元函数GetMemberName(Of T)(expr为System.Linq.Expressions.Expression(Of Func(Of T)))为字符串
Dim memberExpr As System.Linq.Expressions.MemberExpression=TryCast(expr.Body,System.Linq.Expressions.MemberExpression)
如果memberExpr什么都不是,那么_
抛出新ArgumentOutOfRangeException(“参数必须是以下格式的lambda表达式:”&
“'()=>Class.Member'、'()=>object.Member'或'()=>fieldOrLocal')
Const VBLocalPrefix=“$VB$Local\”$VB$中的奇数前缀表示局部变量成员名称。
GetMemberName=memberExpr.Member.Name
如果是(GetMemberName.StartsWith(VBLocalPrefix)),则GetMemberName=GetMemberName.Substring(VBLocalPrefix.Length)
端函数
我在输出窗格中收到以下错误消息:

转换错误:无法转换代码。详情:

--第8行第8列:无效的非模块声明

请检查原始代码中是否有任何错误,然后重试

我已经仔细阅读了这些结果,但它们基本上都给出了解决办法(即回答方说“这是我为您手动完成的转换”),并且没有解释导致失败的原因或如何避免失败


我知道我可以找到如何手动转换代码的方法,但我的问题是:为什么转换器无法转换此代码?

我发现了问题!原因是这行代码:

抛出新ArgumentOutOfRangeException(“参数必须是以下格式的lambda表达式:”&
“'()=>Class.Member'、'()=>object.Member'或'()=>fieldOrLocal')
可能转换器不是最新的,但在符号and后添加下划线修复了问题,代码现在已成功转换:

抛出新ArgumentOutOfRangeException(“该参数必须是以下格式的lambda表达式:&”_
“'()=>Class.Member'、'()=>object.Member'或'()=>fieldOrLocal')

我在第8行第8列得到了错误-如果我没有弄错的话,这部分是:
System.Linq.Expressions.Expression(Of Func(Of T))
。糟糕的是,我删除了XML文档,试图看看这是否是原因,代码是否有缩进-我复制了这部分的输出。当我把它放回(更新)时,得到了相同的行/列@roryap:没问题!很高兴我能帮忙。
''' <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