也许我的问题很简单或只是愚蠢但我有以下问题:
我有2种多态方法:
public void Index<T>(string alias, IEnumerable<T> items) where T : class
{
var result = Client.IndexMany(items, alias);
ExceptionHandling(result);
}
public void Index<T>(string alias, T item) where T : class
{
var result = Client.Index(item, x => x.Index(alias));
ExceptionHandling(result);
}
当我现在尝试使用以下命令调用获得List
的方法时:
ClientService.Index(Alias, items.ToList());
始终调用方法Index<T>(string alias, T item)
。如何更改列表调用第一个方法,单个对象调用第二个方法?
答案 0 :(得分:2)
我有另一种解决方案!
您可以使用参数名称来区分重载!
你看,第一个重载的第二个参数叫做items
,而第二个重载的第二个参数叫做item
。因此,如果要调用第一个重载,则只需:
ClientService.Index(Alias, items: items.ToList());
如果你想要第二个,你可以打电话:
ClientService.Index(Alias, item: items.ToList());
看到区别?
干净整洁!在chsarppad上进行了测试:http://csharppad.com/gist/0d7f71c66079fefa680ea3f6afb2ed63
答案 1 :(得分:1)
这是一个方法(重载)具有相同名称的问题,其中两个重载明显地做了不同的事情 - 你有一个解决方案的提示;在其他地方,您已将下游方法命名为Index
和IndexMany
。
您的两个选项是
答案 2 :(得分:1)
您可以指定通用参数类型,例如
ClientService.Index<Item>(Alias, items.ToList());