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

这可能吗?我知道这是不可能的:)

最佳答案

Is this possible at all?

当然 - 您不能做的唯一一件事就是让 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# - 使用 TFS 2012 API,如何获取用户的电子邮件地址?

c# - 修改路径字符串以提高鲁棒性

c# - 如何从对象类型定义泛型类型?

c# - 为什么我的 Dictionary 类看不到 ToArray() 方法?

c# - 是否可以创建构造函数扩展方法?如何?

c# - 错误 : Extension methods must be defined in a top level static class (CS1109)

c# - 从另一个页面的文本 block 中抓取文本

javascript - 使用 javascript 从 CefSharp 浏览器获取文本框值

c# - C# 中具有多个接口(interface)的属性可访问性

c# - 我可以 "multiply"一个字符串(在 C# 中)吗?