2013-11-22 127 views
0

我有一个IRepository和知识库采取匿名类型,但它会抛出一个错误,它不能从List<T>转换为List<T>。我认为这会发生的唯一原因可能是IRepository中的T和Repository中的T不明确。无法从列表<T>转换为列表<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

显示的使用,而不是实现。 – MarcinJuraszek

+0

[如何将JSON.Net反序列化为匿名类型?](http://stackoverflow.com/questions/7995856/how-to-deserialize-using-json-net-to-an-anonymous-type ) –

+0

@IanMercer'entities = new List ();'也不起作用。 “ – Jeff

回答

2

更改defintions是像这样..

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

当模板类,你不需要模板的功能。如果你确实认为它们是不同类型的,即使你使用了相同的变量

+0

”不能隐式地从列表转换为列表“ – Jeff

+0

我更新了我的答案 – iamkrillin

+0

感谢您的反馈意见。这在早期阶段是错误的。我还没有尝试实例化存储库,因为编码存储库时出现此错误。 – Jeff

1

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

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

public void DeserializeJSON() 

而不是

public void DeserializeJSON<T>() 
+0

就是这样。谢谢。 – Jeff

相关问题