vb.net - 错误: Type parameter 'T' cannot be inferred

标签 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();
    }

类 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/

相关文章:

mysql - 在 Vb.Project 上渲染之前更改连接字符串(数据集)

.net - VB.Net 片段 - 获取函数或子名称

asp.net - 密码的正则表达式匹配

Access 中旧 VB.NET 项目中的 MYSQL 连接字符串

c# - 如何从 VB.Net 调用 C# 类的静态方法?

vb.net - 如何使用 VB.NET 在时间上添加前导零?

.net - 如何计算用户在应用程序上花费的总时间?

vb.net - CDATE如何在VB.NET上执行从字符串到日期的转换

vb.net - 使用 Visual Studio 代码,编码 vb.net,如何启动我的程序然后进入 Debug模式?

c# - 远程服务器返回意外响应 : (413) Request Entity Too Large.