是否在扩展方法 class 内调用扩展方法?

Calling extension methods inside extension method class or not?

在扩展方法内部,有时使用其他扩展方法是有意义的。我不确定你是否应该使用 "this" 语法。

public static class StringExtensions
{
    // Foo vs Foo1
    public static string Foo(this string s)
    {
        return s + "Foo" + s.Bar(); // "this" syntax
    }

    public static string Foo1(this string s)
    {
        return s + "Foo" + Bar(s);
    }

    public static string Bar(this string s)
    {
        return s + "Bar";
    }
}

Foo 对比 Foo1。出现两个问题:

  1. 性能。生成的 IL 代码有什么不同吗?
  2. 代码设计。这两种方法中哪一种更可取?为什么?
  1. 没有性能差异,因为扩展方法被编译为常规静态方法调用。

  2. 我会说 this 语法更可取,因为如果您将方法声明为扩展方法 (this string s) - 最好总是 将其作为扩展方法调用,不要与常规静态调用混淆。