这可能是一个相当复杂的问题,但只是检查是否有答案。
考虑有两种大致如下所示的扩展方法(它们位于我无法控制的另一个程序集中):
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/