Skip to main content
 首页 » 编程设计

c#之从通用类型加载通用集合

2024年02月24日30zhwl

我有以下代码,我试图在其中为我的 DAL 中的对象创建一个通用集合(只是一个练习,而不是实际的生产代码)。我的问题是我想使用传入的 Read 方法的类型(它是类实现的接口(interface)的一部分)。

我无法创建 new T,所以我没有要使用的对象实例,我也无法将其声明为基类型,因为我需要由 的子对象指定的读取方法基础对象。

这真的可能还是我找错树了?

public class ItemDictionary<T> where T : ILoadable, DataItem 
{ 
 
    public void Load() 
    { 
        using (IDataReader reader = SqlHelper.ExecuteReader(_connection, CommandType.StoredProcedure, _proc)) { 
            Read(reader); 
        } 
    } 
 
    bool Read(IDataReader reader) 
    { 
        while (reader.Read)  
        { 
            T item = default(T);            //Here be the problem 
 
            if (item.Read(reader))  
            { 
                this.Add(item.Guid, item); 
            } 
        } 
 
        return true; 
    } 
 
} 
 
public class ExampleObject : DataItem, ILoadable 
{ 
 
    bool Read(IDataReader reader) 
    { 
        _var1 = reader.getString(0); 
        _var2 = reader.getString(1); 
        _var3 = reader.getString(2); 
 
        return true; 
    } 
} 

请您参考如下方法:

你能不能在集合持有的类型上没有默认构造函数并将 new() 指令添加到 where T : 指令?

public class ItemDictionary<T> where T : ILoadable, DataItem, new() 

然后:-

    T item = new T();