C#中的泛型问题

fri*_*iwi 0 c# visual-studio-2010 asp.net-mvc-2

所有的拳头,我是仿制药的新手.我有以下代码的问题:

namespace YvanSoftware_V5.Models
{
    public interface ISession : IDisposable
    {
        void CommitChanges();
        Db4objects.Db4o.IObjectContainer Container { get; }
        void Delete(System.Linq.Expressions.Expression<Func< T, bool>> expression);
        void Delete(object item);
        void DeleteAll();
        void Dispose();
        T Single(System.Linq.Expressions.Expression<Func< T, bool>> expression);
        System.Linq.IQueryable All();
        void Save(T item);
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到以下编译错误,但我不知道在这种情况下它意味着什么.

找不到类型或命名空间名称"T"(您是否缺少using指令或程序集引用?)

我从http://www.itslet.nl/?p=125获得了此代码.

谢谢您的帮助,

伊凡

ale*_*exn 9

这是因为T没有定义.编译器将尝试查找名称T不存在的类型.尝试将您的界面签名更改为:

public interface ISession<T> : IDisposable
Run Code Online (Sandbox Code Playgroud)

如果您不希望整个界面是通用的,可以添加到每个方法,例如:

Save<T>(T item)
Run Code Online (Sandbox Code Playgroud)

实际上,这就是这段代码的作者所做的,请查看Db4oSession您提供的链接中的实现类.正确的接口定义应该是:

public interface ISession : IDisposable
{
    void CommitChanges();
    Db4objects.Db4o.IObjectContainer Container { get; }
    void Delete<T>(System.Linq.Expressions.Expression<Func< T, bool>> expression);
    void Delete(object item);
    void DeleteAll();
    void Dispose();
    T Single<T>(System.Linq.Expressions.Expression<Func< T, bool>> expression);
    System.Linq.IQueryable All();
    void Save<T>(T item);
}
Run Code Online (Sandbox Code Playgroud)