我正在尝试定义泛型类
public abstract class RepositoryBase<TDatabase, TKey, T> : IRepository<TKey, T>
where T : class
where TDatabase : IDatabase
{
private TDatabase db;
private readonly IDbSet<T> dbset;
protected IDatabaseFactory<TDatabase> DatabaseFactory { get; private set; }
protected TDatabase Database
{
get
{
return db ?? (db = DatabaseFactory.Get());
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
在线return db ?? (db = DatabaseFactory.Get());,编译器抱怨"左'的操作数'??' 运算符应该是引用或可空类型"
我理解错误,但不知道如何对TDatabase类型参数设置约束,以便编译器知道它是引用或可空类型.
如何让编译器开心?
您必须指明这TDatabase是一种引用类型
where TDatabase : class, IDatabase
Run Code Online (Sandbox Code Playgroud)
其中T:class 类型参数必须是引用类型; 这也适用于任何类,接口,委托或数组类型.
?? ?? operator被称为null-coalescing运算符,用于为可空值类型或引用类型定义默认值.如果操作数不为null,则返回左侧操作数; 否则返回正确的操作数.