我有一个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);
}
...
}
答案 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>()