我正在尝试从经理类调用方法BinaryFileDeSerialize
,但是我遇到了转换问题。
public List<T> BinaryFileDeSerialize<T>(string filePath) where T : class
{
var list = new List<T>();
if (!File.Exists(filePath))
throw new FileNotFoundException("The file" + " was not found. ", filePath);
using (var fileStream = new FileStream(filePath, FileMode.Open))
{
BinaryFormatter b = new BinaryFormatter();
while (fileStream.Position < fileStream.Length)
list.Add((T)b.Deserialize(fileStream));
}
return list;
}
Manager
上课:
private List<T> m_list;
public ListManager()
{
m_list = new List<T>();
}
public List<T> Open(string filename)
{
BinSerializerUtility binSerial = new BinSerializerUtility();
return binSerial.BinaryFileDeSerialize<List<T>>(filename); //<-- Errror
}
错误:
无法隐式转换类型 'System.Collections.Generic.List&GT;' 到'System.Collections.Generic.List
更新
我试过return binSerial.BinaryFileDeSerialize<T>(filename);
但我得到了错误:
类型'T'必须是引用类型才能将其用作参数 泛型类型或方法中的'T' “Assign_1.BinSerializerUtility.BinaryFileDeSerialize(字符串)
答案 0 :(得分:3)
更新您的Open()方法,使其具有引用类型的通用约束。
<强>更新强>
public List<T> Open<T>(string filename) where T: class
{
BinSerializerUtility binSerial = new BinSerializerUtility();
return binSerial.BinaryFileDeSerialize<T>(filename);
}
答案 1 :(得分:0)
出现第一个错误,因为T
为List<T>
,结果您得到List<List<T>>
,要解决这个问题,您必须只传递T
}。
第二个错误是因为方法BinaryFileDeSerialize
具有T : class
,这意味着T
是引用类型。
public class ListManager<T> where T : class // T is reference type
{
private List<T> m_list;
public ListManager()
{
m_list = new List<T>();
}
public List<T> Open(string filename)
{
BinSerializerUtility binSerial = new BinSerializerUtility();
return binSerial.BinaryFileDeSerialize<T>(filename); // just T
}
}