c# - 如何在没有嵌套类的情况下在 Azure Functions 中共享扩展方法?

标签 c# extension-methods azure-functions

我知道如何通过 #load 包含其他 .csx 文件。但是,扩展方法必须在顶级类中定义,并且 #load 嵌套类,因此它不是顶级的,函数会引发编译错误。

如何在不将共享代码嵌套在函数的后编译类中的情况下使用共享代码?

最佳答案

为了正确地包含 Azure Functions 的扩展方法,您可以像在所有其他情况下一样使用#load,关于扩展方法需要在顶级类中的要求的唯一区别是使它们成为顶级方法 :)。当 Azure Function 获取 csx 文件的编译内容被包装在自动创建的类中时,这就是为什么它提示以常规 c# 方式编写的扩展方法将嵌套在该自动创建的类中。

理解了这一点后,有一个简单的技巧可以在单独的 csx 文件中拥有扩展方法,并且仍然在顶级类中定义它们:

这里是run.csx文件

#load "extensions.csx"

public static void Run(TimerInfo timer, TraceWriter log)
{
    log.Info("test".MyToUpperExtension());
}

和 extensions.csx

static string MyToUpperExtension(this string str)
{
    return str.ToUpper();
}

static string MyToLowerExtension(this string str)
{
    return str.ToLower();
}

如您所见,常规扩展方法之间的唯一区别是您不需要自己将它们包装在静态类中。

关于c# - 如何在没有嵌套类的情况下在 Azure Functions 中共享扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42285150/

相关文章:

c# - 用于键值查找的更简单的数据结构?

c# - 将 iTextSharp 与 MVC 结合使用

c# - 何时使用 JsonResult 而不是 ActionResult

c# - 如何使用 string.Substring(char, char) 而不是 string.Substring(int, int)?

azure - 如何在 Azure Functions 中对 HTTP POST 执行模型绑定(bind)?

c# - Image/Bitmap 和 PictureBox 的正确处理方式

ruby - 在 ruby​​ 中扩展 Date 类

Java 等价于 C# 扩展方法

Azure WebJob 队列触发器不响应加密的队列消息

Azure Functions v3/HTTP 触发器函数 : Limiting the request body and URL size