泛型方法约束错误-请考虑改用显式接口实现
本文关键字:显式接口实现 约束 错误 泛型方法 | 更新日期: 2023-09-27 18:26:37
我有这个方法:
public T GetRepositoryByType<T>() where T : IContextDependent
{
var instance = this.Repositories.SingleOrDefault(x => x is T);
return (T)instance;
}
它需要能够返回任何实现IContextDependent
的存储库实例,这样我就可以手动为每个实例设置DbContext。
当我构建时,我得到了这个错误:
错误CS0425方法的类型参数"T"的约束"RepositoryProvider.GetRepositoryByType()"必须与接口方法的类型参数"T"的约束"IRepositoryProvider.GetRepositoryByType()"。请考虑使用而是显式接口实现。
但是,如果我考虑MSDN中的代码:
void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T>
{
T temp;
if (lhs.CompareTo(rhs) > 0)
{
temp = lhs;
lhs = rhs;
rhs = temp;
}
}
我看不出直接的区别(除非需要进一步的泛型依赖性?)。
仅供参考,界面非常简单:
public interface IContextDependent
{
void SetContext(MyEntities context);
}
以及IRepositoryProvider接口:
public interface IRepositoryProvider
{
T GetRepositoryByType<T>();
}
错误的原因是什么?
RepositoryProvider.GetRepositoryByType()'必须与接口方法'IRepositoryProvider.GetRepositoryByType'的类型参数'T'的约束匹配
您对RepositoryProvider的限制是:where T : IContextDependent
因此,您对IRepositoryProvider的约束也必须为where T : IContextDependent
也就是说,你的界面应该写如下:
public interface IRepositoryProvider
{
T GetRepositoryByType<T>() where T : IContextDependent;
}