【发布时间】:2011-09-24 03:21:11
【问题描述】:
这是两个扩展方法重载的简单示例
public static class Extended
{
public static IEnumerable<int> Even(this List<int> numbers)
{
return numbers.Where(num=> num % 2 == 0);
}
public static IEnumerable<int> Even(this List<int> numbers, Predicate<int> predicate)
{
return numbers.Where(num=> num % 2 == 0 && predicate(num));
}
}
我希望能够通过将委托设置为可选来将它们合并为一个:
public static class Extended
{
public static IEnumerable<int> Even(this List<int> numbers, Predicate<in> predicate = alwaysTrue)
{
return numbers.Where(num=> num % 2 == 0 && predicate(num));
}
public static bool alwaysTrue(int a) { return true; }
}
但是,编译器会抛出错误:
'predicate' 的默认参数值必须是编译时常量
我看不出我的 alwaysTrue 函数如何不是常量,但是,嘿,编译器知道得更好 :)
有没有办法让委托参数可选?
【问题讨论】:
标签: c# c#-4.0 delegates optional-parameters