【问题标题】:How to convert Shared VB.NET method to C#如何将共享 VB.NET 方法转换为 C#
【发布时间】:2013-10-09 21:53:17
【问题描述】:

我有以下用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 中的 Shared 和 C# 中的 static 的工作方式有区别吗?转换工具没有正确转换这个吗?

【问题讨论】:

    标签: c# vb.net static porting shared


    【解决方案1】:

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

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

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

    【讨论】:

    • 我了解如何从这个角度解决问题。我的兴趣更多在于它为什么在 VB.NET 而不是 C# 中工作。
    • 这就是为什么你不应该将参数命名为与类名相同的一个重要原因,即使大小写不同。
    • @DaveDoknjas 好的,这让我更清楚了。我想我从另一个 SO question 复制了这段代码,并没有真正关注参数名称。你每天都会学到新东西。
    • @DaveDoknjas 如果您将评论移至答案中,我会接受,因为从技术上讲,您的答案与我的问题最相关。
    • @KarlAnderson 好电话。这也是一个很好的理由,不要只是复制代码而不全面审查它!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-11
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多