编译器的变化?
Changes in compiler?
对于曾经在Visual Studio 2017
上工作的项目VB.Net
,我升级到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))
如果这个改变了还有什么改变?是否有预期会出现哪些类型问题的列表?
我尝试在 VS2017 和 VS2019 中都使用框架 4.5.1 复制它
我运行的代码是
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 中都得到了一个空引用,所以我怀疑其他地方发生了变化。
对于曾经在Visual Studio 2017
上工作的项目VB.Net
,我升级到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))
如果这个改变了还有什么改变?是否有预期会出现哪些类型问题的列表?
我尝试在 VS2017 和 VS2019 中都使用框架 4.5.1 复制它
我运行的代码是
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 中都得到了一个空引用,所以我怀疑其他地方发生了变化。