【发布时间】:2014-02-12 13:01:34
【问题描述】:
我有一个函数
public List<Item> Filter(params String[] valuesOrdered)
{
//...
}
它充当所有Items 的过滤器。
public class Item
{
List<String> propertiesOrdered;
//...
}
所以如果我打电话给例如Filter("prop1"),然后所有Items 以"prop1" 作为第一个条目,它们的属性将被匹配。
如果我调用Filter(),那么所有Items 都应该返回。
我还需要能够匹配 null 值。因此,例如现在我可以调用Filter(null, null) 和所有Items 和null, null,因为它们的第一个属性将被匹配。
除了我打电话给Filter(null) 之外,所有这些都有效。其解释方式与Filter() 相同,但意图是前者应返回所有Items,null 作为其第一个属性,后者应返回所有Items。
我尝试定义一个重载来处理这个问题
public List<Item> Filter(String value)
{
if(value == null)
return Filter(new String[] {null});
else
return Filter(value);
}
但是当我调用Filter(null) 时,编译器只会显示Ambiguous Invocation 错误。
【问题讨论】:
-
请注意,即使您的过载结果没有帮助,它也应该是
public List<Item> Filter(String value) { return Filter(new[] {value}); }。这更简单,并且总是调用原始重载(以正确的方式),而在value为非空的情况下,您无限递归地调用自己。 (请注意,Filter(value)不是模棱两可的。) -
@JeppeStigNielsen 啊,是的。幸好它一开始就没有建立,因为另一个电话:)
标签: c# overloading params params-keyword