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