如何编写处理单个对象和集合的通用Save()方法? [英] How do I write a generic Save() method that handles single objects and collections?

查看:81
本文介绍了如何编写处理单个对象和集合的通用Save()方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  public void Save< T>(T entity)
{
_session.Save(entity);

$ b public void Save< T>(IEnumerable< T> entity)
{
foreach(实体中的var item)
{
_session.Save(item);


但是,当我使用保存(集合)(它自动推断类型),它将它识别为 T 而不是 IEnumerable< T> 并尝试使用第一个方法保存它。



如何编写这个保存方法以便它可以处理任何一种情况,没有我必须明确提供类型?

解决方案

将类型参数放在存储库的类级别而不是方法这种方式过载不会含糊不清。

  class Repo< T> 
{
public void Save(T entity)
{
_session.Save(entity);

$ b $ public void Save(IEnumerable< T> entities)
{
foreach(实体中的var item)
{
_session。保存(项目);
}
}
}

这个:

  var repo = new Repo< Person>(); 

var p = new Person();
repo.Save(p);

var ps = new Person [] {p};
repo.Save(ps);


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?

解决方案

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.

class Repo<T>
{
    public void Save(T entity)
    {
        _session.Save(entity);
    }

    public void Save(IEnumerable<T> entities)
    {
        foreach (var item in entities)
        {
            _session.Save(item);
        }
    }
}

You'd use it like this:

var repo = new Repo<Person>();

var p = new Person();
repo.Save(p);

var ps = new Person[] { p };
repo.Save(ps);

这篇关于如何编写处理单个对象和集合的通用Save()方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆