类型''不能用作泛型类型或方法''中的类型参数'T'。没有从''到''的隐式引用转换 [英] The type '' cannot be used as type parameter 'T' in the generic type or method ''. There is no implicit reference conversion from '' to ''

查看:4001
本文介绍了类型''不能用作泛型类型或方法''中的类型参数'T'。没有从''到''的隐式引用转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从数据库生成Linq-to-Entity模型并对其进行了修改 - 我创建了接口:

  public interface IValid 
{
字节有效{get;组; }
}

并使一些生成的类继承此接口。



我写了泛型类来访问数据库中的表:

 公开列表< T> GetValidRecords< T>()其中T:class,IValid 
{
try
{
return _context.Set< T>()。其中​​(x => x.Valid == 1).ToList();
}
catch(Exception ex)
{
throw new Exception(ex.Message);


当我在单元测试中调用此方法时, p>

  var records = repositary.GetValidRecords< tableName>(); 

我得到错误 -


类型'tableName'不能用作泛型类型或方法'GetValidRecords()'中的类型参数'T'。没有从'tableName'到'IValid'的隐式引用转换。

如何解决它?

编辑:
my table class:


  public partial class tableName:IValid {
public byte IsValid {get;组; }
}

编辑2:
我的调用方法:

  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())。 var mockContext = new Mock< Entities>();
mockContext.Setup(x => x.tableNames).Returns(mockSet.Object);

var database = new Database(mockContext.Object);
var records = database.GetValidRecords< tableName>(); //这里我得到错误

Assert.AreEqual(2,records.Count,错误的gueltig记录数。


解决方案

  class tableName:IValid 
应该是这样的: {
//实现IValid
}

还要确保类 tableName 实现与方法 GetValidRecords 中使用的相同的IValid接口,即 IValid 来自正确的命名空间。

I generated Linq -to -Entity model from database and modified it - I've made interface :

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'.

How to fix it?

EDIT: my table class:

public partial class tableName: IValid    {
    public byte IsValid { get; set; } 
}

EDIT2: My calling method:

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.");
}

解决方案

tableName should be something like this for it to work:

class tableName : IValid
{
    // implement IValid
}

Also make sure that the class tableName implements the same IValid interface as used in the method GetValidRecords, i.e. the IValid from the correct namespace.

这篇关于类型''不能用作泛型类型或方法''中的类型参数'T'。没有从''到''的隐式引用转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆