如何编写处理单个对象和集合的通用 Save() 方法?
我在存储库类中有两个通用保存方法:
public void Save<T>(T entity)
{
_session.Save(entity);
}
public void Save<T>(IEnumerable<T> entities)
{
foreach (var item in entities)
{
_session.Save(item);
}
}
但是,当我使用 Save(collection) (自动推断类型)时,它会将其识别为 T 而不是IEnumerable
并尝试使用第一种方法保存它。
如何编写此保存方法,以便它可以处理这两种情况,而无需显式提供类型?
I have two generic save methods in a repository class:
public void Save<T>(T entity)
{
_session.Save(entity);
}
public void Save<T>(IEnumerable<T> entities)
{
foreach (var item in entities)
{
_session.Save(item);
}
}
However, when I use Save(collection)
(which infers the type automatically), it recognizes it as a T
rather than IEnumerable<T>
and tries to save it using the first method.
How do I write this save method(s) so that it can handle either case, without me having to explicitly provide the type?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
将类型参数放在存储库的类级别而不是方法级别,这样重载就不会含糊不清。
你会像这样使用它:
Put the type parameter at the class level on your repository instead of at the method level, this way the overload will not be ambiguous.
You'd use it like this:
对于这种特定情况,您不能依赖类型推断。
(T)
将满足任何类型,因此推理不会继续搜索以查找仍满足签名的更具体约束。You can't rely on type inference for this specific case.
<T>(T)
will satisfy any type, so the inference won't continue searching to find more specific constraints which still meet the signature.为什么要为重载方法烦恼呢?这样做不是更好吗:
Whjy bother with overloaded methods?, isn't better to do it like:
您也可以这样使用它:
希望这有帮助!
You can use it like this also:
Hope this helps!!