编译器的变化?

问题描述 投票:0回答:1

对于曾经在VB.Net上工作的Visual Studio 2017项目,我升级到Visual Studio 2019,两个版本仍然使用.Net版本4.5.1。

一些代码曾经在VS2017中运行良好,但在VS2019中它给出了一个例外:

Dim highUId As Integer = alarmNw.Descendants().Max(Function(x) Convert.ToInt32(x.Attribute("UId").Value))

其中alarmNw是一个xElement,其中包含一堆后代,其中一些具有UId属性,有些则没有。 UId属性的值始终是整数值。

可以使用以下命令生成模拟版本的数据:

Dim alarmNw As XElement = New XElement("Main", New XElement("Sub1", New XAttribute("UId", 1)), New XElement("Sub2"))

错误消息是:Reference not set to instance of an object.

我在release notes找不到任何相关内容。

当然可以通过将其更改为:

Dim highUId As Integer = alarmNw.Descendants().Where(Function(y) y.Attribute("UId") IsNot Nothing).ToList() _
                    .Max(Function(x) Convert.ToInt32(x.Attribute("UId").Value))

如果这改变了其他改变了什么?是否列出了预期会出现哪些类型的问题?

vb.net visual-studio-2019
1个回答
1
投票

我试图使用框架4.5.1在VS2017和VS2019中复制它

我跑的代码是

 Sub Main()

    Dim alarmNw As XElement = New XElement("Main", New XElement("Sub1", New XAttribute("UId", 1)), New XElement("Sub2"))

    Dim highUId As Integer = alarmNw.Descendants().Max(Function(x) Convert.ToInt32(x.Attribute("UId").Value))

    Console.WriteLine(highUId)

    Console.Read()

End Sub

我在两个IDE中都得到一个空引用,所以我怀疑其他的东西已经改变了。

© www.soinside.com 2019 - 2024. All rights reserved.