wpf 类型 '' 不能用作泛型类型或方法 '' 中的类型参数 'T'。没有从 '' 到 '' 的隐式引用转换
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/22611866/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
The type '' cannot be used as type parameter 'T' in the generic type or method ''. There is no implicit reference conversion from '' to ''
提问by Sasha
I generated Linq -to -Entity model from database and modified it - I've made interface :
我从数据库生成了 Linq -to -Entity 模型并对其进行了修改 - 我已经制作了界面:
public interface IValid
{
byte Valid{ get; set; }
}
and make some generated classes to inherit this interface.
并制作一些生成的类来继承这个接口。
I've wrote generic class to access tables from database:
我编写了通用类来访问数据库中的表:
public List<T> GetValidRecords<T>() where T: class, IValid
{
try
{
return _context.Set<T>().Where(x => x.Valid == 1).ToList();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
When I call this method in my unit test
当我在单元测试中调用此方法时
var records = repositary.GetValidRecords<tableName>();
I get error -
我得到错误 -
The type 'tableName' cannot be used as type parameter 'T' in the generic type or method 'GetValidRecords()'. There is no implicit reference conversion from 'tableName' to 'IValid'.
类型“tableName”不能用作泛型类型或方法“GetValidRecords()”中的类型参数“T”。没有从“tableName”到“IValid”的隐式引用转换。
How to fix it?
如何解决?
EDIT: my table class:
编辑:我的表类:
public partial class tableName: IValid {
public byte IsValid { get; set; }
}
EDIT2: My calling method:
EDIT2:我的调用方法:
public void GetValidRecordsGenericTest()
{
var data = new List<tableName>
{
new tableName() {Valid = 1},
new tableName() {Valid = 1}
}.AsQueryable();
var mockSet = new Mock<DbSet<tableName>>();
mockSet.As<IQueryable<tableName>>().Setup(m => m.Provider).Returns(data.Provider);
mockSet.As<IQueryable<tableName>>().Setup(m => m.Expression).Returns(data.Expression);
mockSet.As<IQueryable<tableName>>().Setup(m => m.ElementType).Returns(data.ElementType);
mockSet.As<IQueryable<tableName>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator()); var mockContext = new Mock<Entities>();
mockContext.Setup(x => x.tableNames).Returns(mockSet.Object);
var database = new Database(mockContext.Object);
var records = database.GetValidRecords<tableName>(); // here I get error
Assert.AreEqual(2, records.Count, "Wrong number of gueltig records.");
}
采纳答案by helb
tableNameshould be something like this for it to work:
tableName应该是这样的:
class tableName : IValid
{
// implement IValid
}
Also make sure that the class tableNameimplements the same IValid interface as used in the method GetValidRecords, i.e. the IValidfrom the correct namespace.
还要确保该类tableName实现了与方法中使用的相同的 IValid 接口GetValidRecords,即IValid来自正确命名空间的接口。

