【发布时间】:2020-08-11 06:17:04
【问题描述】:
public static void AddOrUpdate<T>(T entry) where T : class
{
//stuff
}
public static void AddOrUpdate<T>(IEnumerable<T> entries) where T : class
{
foreach (var entry in entries)
{
//stuff
}
无论我向这个方法发送什么,总是选择第一个。如何分离 IEnmuerables 和单个对象?
AddOrUpdate(entry); //goes into first one
AddOrUpdate(new Analog[] { entry}); //still goes into first one
【问题讨论】:
-
可能有几种类型的类,这意味着我必须为所有这些类进行重载?好像不是很通用
-
不,我显示的是调用者。
-
使用
AddOrUpdate<IEnumerable<Analog>>(...);拨打电话。这是通用的。 -
除非你显式地传递
IEnumerable<T>,否则单项重载将是首选。这就是为什么框架有很多AddRange方法来避免这样的冲突。 -
规范的整个部分都写了关于重载解析
12.6.4 Overload resolution进入更深入12.6.4.3 Better function member因为你的类型不同它认为更通用的类型更好
标签: c# object methods overloading ienumerable