我以前从事过一个 C# 项目,现在我基本上在做相同的项目,但在 vb.net 中。
C# 代码: 经理类
/// <summary>
/// Reads file from binary
/// </summary>
/// <param name="the filepath"></param>
/// <returns></returns>
public Animal[] ReadFile(string filename)
{
BinSerializerUtility BinSerial = new BinSerializerUtility();
var animals = BinSerial.BinaryFileDeSerialize<Animal>(filename);
return animals.ToArray();
}
类 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;
}
在 C# 中一切正常,但在 vb.net 中出现问题。
我尝试在 vb.net 中这样做:
经理类:
Public Function ReadFile(ByVal filename As String) As Animal()
Dim BinSerial As BinSerializerUtility = New BinSerializerUtility
Dim animals = BinSerial.BinaryFileDeSerialize(filename)
Return animals.ToArray
End Function
从上面的代码中我收到一个错误:
Type parameter 'T' for 'Public Function BinaryFileDeSerialize(Of T As Class)(filePath As String) As System.Collections.Generic.List(Of T)' cannot be inferred.
vb.net 类 BinaryFileDeSerialize:
Public Function BinaryFileDeSerialize(Of T As {Class})(ByVal filePath As String) As List(Of T)
Dim list = New List(Of T)
If Not File.Exists(filePath) Then
Throw New FileNotFoundException(("The file" + " was not found. "), filePath)
End If
Dim fileStream = New FileStream(filePath, FileMode.Open)
Dim b As BinaryFormatter = New BinaryFormatter
While (fileStream.Position < fileStream.Length)
list.Add(CType(b.Deserialize(fileStream), T))
End While
Return list
End Function
有人知道问题是什么以及如何解决吗?
最佳答案
您需要调用
Dim animals = BinSerial.BinaryFileDeSerialize(Of <put your type here>)(filename)
因此,如果您的类型是 Animal*,请使用
Dim animals = BinSerial.BinaryFileDeSerialize(Of Animal)(filename)
*最近编辑后
从一开始,您就可以帮助您的项目避免与类型相关的复杂情况。写 Option Explicit
作为类文件的第一行。它将要求您使用
声明每个变量
As <type>
它的返回是应用程序可以更容易地阅读、维护并避免与类型相关的错误。
添加Option Explicit
后,您必须添加类型声明:
Dim animals As List(Of Animal) = BinSerial.BinaryFileDeSerialize(Of Animal)(filename)
您可以立即更好地了解自己正在做什么。
关于vb.net - 错误: Type parameter 'T' cannot be inferred,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31864200/