(https://github.com/tommcclean/XContext)
我正在编写一个库,它使用文件系统上的XML文件存储和检索数据。一个名为XMemory的类应该像缓存一样保存一次。
步骤1:从任何对象加载XML文件。使用存储在文件中的序列化XML。
DemoEntity.
第2步:将XML反序列化为对象列表。
List<DemoEntity>.
步骤3:将对象列表存储在类属性中以供以后检索。
问题:我使用T来允许我在运行时传入对象。我无法从内存中的List中检索并作为List返回。
注意:XEntity是一个接口,任何受支持的对象必须实现该接口才能使用此库。
internal class XMemory
{
private List<List<XEntity>> EntityContents { get; set; } = new List<List<XEntity>>();
internal List<T> Read<T>()
{
var entityContent = EntityContents.FirstOrDefault();
return entityContent;
}
}
错误显示“无法将类型'System.Collections.Generic.List'隐含地转换为'System.Collections.Generic.List'
答案 0 :(得分:3)
问题是编译器无法知道EntityContents
内部的任何内容是T
的实例。因此,您需要明确地转换值:
internal List<T> Read<T>()
{
return EntityContents.First().Cast<T>().ToList()
}
答案 1 :(得分:0)
你应该说明T
应该实现的类型(如果我们正在为一个接口说话),那么继承(如果我们正在为一个类说话)XEntity
:
internal List<T> Read<T>() where T : XEntity
{
var entityContent = EntityContents.FirstOrDefault();
return entityContent;
}
尽管上述更改会使代码成功编译,但我无法理解您的课程及其方法的目的。
答案 2 :(得分:0)
当您写下可以返回List<XEntity>
时,您的函数始终会返回List<T>
。因此T
可能不是XEntity
。
我会建议你把这个类变成通用的并返回它的T:
internal class XMemory<T>
{
private List<List<T>> EntityContents { get; set; } = new List<List<T>>();
internal List<T> Read<T>()
{
var entityContent = EntityContents.FirstOrDefault();
return entityContent;
}
}