c# - 指定为可选Func <>的扩展方法

标签 c# extension-methods

这可能是一个相当复杂的问题,但只需检查是否有答案即可。

考虑一下两种扩展方法,它们大致如下所示(并且在另一个我无法控制的程序集中):

public static class ExtensionMethods
{
    public static string ConversionA<T>(this T self) { /* .... */ }
    public static string ConversionB<T>(this T self) { /* .... */ }
} // eo class ExtensionMethods


我有一个在对象上使用此扩展方法的方法。理想情况下,我希望调用者明确指定要使用的转换函数,但在必要时将其默认设置,因此我希望可以将签名以某种方式转换为Func<>

public static class Config
{
    public static T Read<T>(string fileName, Func<T, string> = ExtensionMethods.ConversionA<T>)
    {
    }
} // eo class Config


这有可能吗?我知道这是一个远景:)

最佳答案

这有可能吗?


当然-您唯一不能做的就是让Func是可选参数。可选参数的默认值必须是编译时常量。

不过,您可以通过重载来实现:

public static T Read<T>(string fileName, Func<T, string> func) // non-optional parameter
{
    /* ... */
}

public static T Read<T>(string fileName)
{
    return Read<T>(fileName, ExtensionMethods.ConversionA<T>);
}

关于c# - 指定为可选Func <>的扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15978576/

相关文章:

c# - 接口(interface)扩展方法,具有匹配的泛型参数

c# - 恰好两种不同类型的扩展方法

c# - 获得一个无参数的方法来像 Func<Return>

c# - 如何停止按钮上的页面刷新单击我正在使用更新面板,但它不起作用

c# - 此方法尝试的术语是什么?

c# - 将接口(interface)作为参数传递给扩展方法

c# - 如何使用 WebBrowser 控件显示 XML?

c# - eazfuscator 公共(public)成员未混淆

c# - 有没有办法逐行读取word文档

c# - 如何将 "&login_hint=user@gmail.com"附加到 GoogleWebAuthorizationBroker