【问题标题】:Cannot Convert From List<T> to List<T>无法从 List<T> 转换为 List<T>
【发布时间】:2013-11-22 03:04:24
【问题描述】:

我有一个接收匿名类型的 IRepository 和 Repository,但它抛出了一个错误,它无法从 List&lt;T&gt; 转换为 List&lt;T&gt;。我认为会发生这种情况的唯一原因可能是来自 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);
    }
    ...
}

【问题讨论】:

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


【解决方案1】:

把你的定义改成这样..

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

当你模板化类时,你不需要模板化函数。如果您这样做,即使您使用相同的变量,编译器也会认为它们属于不同的类型

【讨论】:

  • "无法从 List 隐式转换为 List"
  • 感谢您的反馈。这是早期阶段的错误。我还没有尝试实例化一个存储库,因为我在对存储库进行编码时遇到了这个错误。
  • 真正的问题在于你如何声明你的泛型类。我即将更新我的答案
  • 寓言寓意:永远不要关闭警告!
  • @iamkrillin 太棒了!那工作就像一个魅力。非常感谢。
【解决方案2】:

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

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

public void DeserializeJSON()

代替

public void DeserializeJSON<T>()

【讨论】:

  • 就是这样。谢谢。
猜你喜欢
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 2012-02-24
  • 2010-10-06
相关资源
最近更新 更多