无法从列表<t>转换为列表<t> </t> </t>

时间:2013-11-22 03:04:25

标签: c# .net json repository-pattern anonymous-types

我有一个IRepository和Repository,它采用匿名类型,但它会抛出一个错误,它无法从List<T>转换为List<T>。我认为这种情况发生的唯一原因可能是来自IRepository的T和来自Repository的T是模棱两可的。

public interface IRepository<T> where T : class
{
    void DeserializeJSON<T>();
    ...
}

public class Repository<T> : IRepository<T> where T : class
{
    private string data;
    private List<T> entities;

    public void DeserializeJSON<T>()
    {
                   // Cannot implicitly convert type
        entities = JsonConvert.DeserializeObject<List<T>>(data);
    }
    ...
}

2 个答案:

答案 0 :(得分:2)

将你的定义改为如此......

public interface IRepository<T> where T : class
{
    void DeserializeJSON();
}

public class Repository<T> : IRepository<T> where T : class
{
    private string data;
    private List<T> entities;

    public void DeserializeJSON()
    {
                   // Cannot implicitly convert type
        entities = JsonConvert.DeserializeObject<List<T>>(data);
    }
}

当您为课程设置模板时,您不需要模拟这些功能。如果你这样做,即使你使用相同的变量

,编译器也认为它们属于不同的类型

答案 1 :(得分:1)

问题是由于错误的声明造成的。该类使用T作为模板类型,该方法使用另一个T,这两件事情完全不同。

要解决您的问题,请删除方法上的T模板声明。

public void DeserializeJSON()

而不是

public void DeserializeJSON<T>()