错误:无法推断类型参数“T”

时间:2015-08-06 19:25:52

标签: vb.net

我之前曾在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

有谁知道问题是什么以及如何解决?

2 个答案:

答案 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)