无法从泛型方法

时间:2016-05-22 08:42:05

标签: c# generics methods return-value

为这个虚假问题道歉。这个问题与泛型或C#完全无关,只是......我的智商。

刚刚发生了什么:

我的数据容器是一个静态成员变量,在getter函数中它应该是:

get
{
    if (_Data == null)
    {
        _Data = new DataStore();
        return _Data;
    }
    return _Data;
}

我写道:

get
{
    if (_Data == null)
    {
        return new DataStore();
    }
    return _Data;
}

因此,每次从外部获取Data.XXXDataSet时,它始终返回new Data(),因此其中的每个XXXDataSet都为空。

感谢您的帮助......我现在应该删除这个问题吗?

=======原始问题======

问题描述:

我想编写一个通用方法来将一些数据库条目加载到内存(用于编辑器),过程是这样的:

using (var db = new MyDbContext())
{
    db.Configuration.AutoDetectChangesEnabled = false;
    var list = new List<MyDataEntity>((from d in db.MyDataEntity select d).Count());

    foreach (var c in (from d in db.MyDataEntity select d).AsNoTracking())
        list.Add(c);

    Data.MyDataStore = new ObservableCollection<MyDataEntity>(list);
}

这很好用,我写的相应通用方法是:

public static ObservableCollection<T> LoadDBEntries<T>() where T : class
{
    using (var db = new MyDbContext())
    {
        db.Configuration.AutoDetectChangesEnabled = false;
        var dbSet = db.Set<T>();
        var list = new List<T>((from d in dbSet select d).Count());

        foreach (var c in (from d in dbSet select d).AsNoTracking())
            list.Add(c);

        return new ObservableCollection<T>(list);
    }
}

此方法正确运行(看起来如此),列表将填充db数据(可观察集合也是如此),但正如我所写:

Data.MyDataStore = DBWorker.LoadDBEntries<MyDataEntity>();

Data.MyDataStore在执行后仍为空(原始状态)。

我试着这样做:

// I know the ref for coll is unnecessary but...
public static void LoadDBEntries<T>(ref ObservableCollection<T> coll) where T : class
{
    using (var db = new MyDbContext())
    {
        db.Configuration.AutoDetectChangesEnabled = false;
        var dbSet = db.Set<T>();

        var list = new List<T>((from d in dbSet select d).Count());

        foreach (var c in (from d in dbSet select d).AsNoTracking())
            list.Add(c);

        coll = new ObservableCollection<T>(list);
    }
}

然后运行:

DBWorker.LoadDBEntries(ref Data.MyDataStore);

结果相同(Data.MyDataStore为null),但是从调试器中它告诉数据已正确加载到&#39; coll'(以我理解的方式,这是{{1}变量,没有?)。但是,在此方法超出范围后,Data.MyDataStore仍为空。

有人能告诉我为什么会这样吗?我是否误解了C#中的泛型(我对此完全是一个菜鸟)或者更根本的是,C#本身?

非常感谢!

0 个答案:

没有答案