我之前曾在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();
}
class 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
从上面的代码中我得到一个错误:
为'Public Function BinaryFileDeSerialize(Of T As。)输入参数'T' Class)(filePath As String)As System.Collections.Generic.List(Of T)' 无法推断。
vb.net class 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
有谁知道问题是什么以及如何解决?
答案 0 :(得分:3)
您需要致电
As <type>
因此,如果您的类型是Animal *,请使用
Option Explicit
*在您最近的编辑之后
从一开始,您就可以帮助您的项目避免与类型相关的并发症。将Option Explicit
写为类文件的第一行。它将要求您使用
声明每个变量
Dim animals As List(Of Animal) = BinSerial.BinaryFileDeSerialize(Of Animal)(filename)
及其回报是可以更容易阅读,维护并避免与类型相关的错误。
因此,在添加index.html
之后,您必须添加类型声明:
index.php
您可以立即更好地了解自己在做什么。
答案 1 :(得分:1)
在C#版本中,提供了泛型方法的type参数:
BinSerial.BinaryFileDeSerialize<Animal>(filename);
它必须是,因为filename
只是一个字符串,没有其他方法来推断参数。但是在VB版本中没有提供它:
BinSerial.BinaryFileDeSerialize(filename)
出于同样的原因,它仍然需要:
BinSerial.BinaryFileDeSerialize(Of Animal)(filename)