如何将共享 VB.NET 方法转换为 C#

本文关键字:方法 转换 NET VB 共享 | 更新日期: 2023-09-27 18:34:35

我用 VB.NET 编写了以下方法:

Public Shared Function formatClassNameAndMethod(ByVal prefix As String, ByVal stackFrame As StackFrame) As String
        Dim methodBase As MethodBase = StackFrame.GetMethod()
        Return prefix + ":[" + stackFrame.GetMethod().DeclaringType.Namespace + "][" + stackFrame.GetMethod().DeclaringType.Name + "." + methodBase.Name + "] "
End Function

我使用代码移植工具将其转换为 C#。 它产生了以下方法:

public static string formatClassNameAndMethod(string prefix, StackFrame stackFrame)
{
    MethodBase methodBase = StackFrame.GetMethod();
    return prefix + ":[" + stackFrame.GetMethod().DeclaringType.Namespace + "][" + 
            stackFrame.GetMethod().DeclaringType.Name + "." + methodBase.Name + "] ";
}

不幸的是,Visual Studio现在给了我以下错误:

无法访问静态上下文中的非静态方法"GetMethod">

它抱怨StackFrame.GetMethod()因为这种方法不是静态的。 为什么会这样? 我明白错误是什么,但我不明白为什么我没有在 VB.NET 得到这个。 VB.NET 中的共享和 C# 中的静态工作方式是否有区别? 转换工具没有正确转换吗?

如何将共享 VB.NET 方法转换为 C#

GetMethod不是静态的。这就是它告诉你的。

这意味着您需要先创建一个实例,然后才能调用该方法。您的方法已经传入了一个StackFrame实例。这只是区分大小写的情况。小写 S

public static string formatClassNameAndMethod(string prefix, StackFrame stackFrame)
{ //                                                                     ^^^ this
    MethodBase methodBase = stackFrame.GetMethod();
    //                     ^^ lowercase S

VB 不区分大小写 - 编译器看到"StackFrame.GetMethod(("并说"哦,开发人员一定是"stackFrame.GetMethod(("。