在没有显式引用的方法上调用扩展方法

帕特里克·萨拉斯基(Patrick Szalapski)

有什么方法可以在方法上调用扩展方法,但没有显式引用?

例如,如果我有一个扩展方法:

public static class Extensions {
    public static void FooOn(this Func<string> method) =>
        Console.WriteLine($"Foo on {method()}");
}

我以为也许我可以做这样的事情,但也许不能。

class Program {
    private string Bar() => "you"; 
    void Main() => Bar.FooOn();  // won't compile
}

相反,似乎我必须声明一个临时引用:

class Program {
    private string Bar() => "you"; 
    void Main(){
        Func<string> temp = Bar;
        temp.FooOn();
    }
}

那么,有什么方法可以在没有显式引用的情况下调用方法的扩展方法?

不,您不能,因为它是方法,不能与扩展方法一起使用。

有几种解决方法(.NET Fiddle):

  1. 正如问题中已经提到的,您可以创建一个临时变量,该临时变量引用该方法:
    Func<string> temp = Bar;
    temp.FooOn();
    
  2. 您可以显式Bar转换为Func<string>
    static void Main() => ((Func<string>)Bar).FooOn();
    
  3. 您直接Bar作为参数传递扩展方法
    static void Main() => Extensions.FooOn(Bar);
    
  4. 您将其存储BarFunc<string>变量:
    static Func<string> Bar = () => "you"; 
    static void Main() => Bar.FooOn();
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

没有显式调用的方法的 Java 堆栈帧(调用站点)

在没有显式调用的情况下如何调用'actionPerformed'方法?

类是否可以在协议扩展上显式调用方法?

在没有任何引用的情况下在同一对象上调用多个方法

在主环境中调用没有显式接收器的方法

如何在C#中的基类上调用显式接口方法?

在null引用上调用扩展函数时,没有NullPointerException

订户类没有在事件上调用的公共方法

如何在没有反射和动态代理的情况下简单地显式调用默认方法?

为什么不能使用显式泛型参数调用泛型扩展方法?

如果类显式扩展Object,为什么不能调用方法?

显式调用Java中的默认方法

为什么在显式调用构造函数时不能引用实例方法?

有没有比显式赋值更好的方法在 Express 中实现 PUT 方法?

有没有一种方法可以将对C ++类成员的引用添加到向量中而无需显式添加它们?

python中有没有一种方法可以执行文件中的所有功能而无需显式调用它们?

有没有一种方法可以显式地编写一个长生不老药的函数以优化尾部调用?

在方法引用的返回值上调用方法

android 有错误“尝试在空对象引用上调用接口方法”.featFCM

从单独的jar库调用没有引用的方法

在没有引用的情况下调用子方法

有没有一种单行方法可以在集合上调用lambda函数?

有没有一种安全的方法可以在std :: future上调用wait()?

获取调用扩展方法的引用的名称

在class <T>的类型T的成员变量上调用扩展方法

为什么没有显式范围解析就无法访问父类的父方法?

结构初始化以满足没有显式方法定义的接口

Ruby在没有显式接收器的情况下,什么类会获得方法?

Doxygen不会生成到没有显式类名的方法的链接