Vb.net 编译器中的更改?
对于一个曾经在Visual Studio 2017上工作的项目,我升级到了Visual Studio 2019,两个版本仍然使用.Net版本4.5.1 一些代码过去在VS2017中运行良好,但在Vb.net 编译器中的更改?,vb.net,visual-studio-2019,Vb.net,Visual Studio 2019,对于一个曾经在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,它包含一组子体,其中一些
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未设置为对象的实例。
我在报纸上找不到关于这件事的任何消息
此问题当然可以通过将其更改为:
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中都得到了一个空引用,因此我怀疑其他地方发生了变化。alarmNw是否可能包含不同的数据?@the_lotus No,我在完全相同的源数据上进行了测试。异常消息是什么?(请注意,可能与此无关,但请记住将Option Strict On设置为新项目的默认值,因为该设置似乎不会被执行。)如果x.Attribute(“UId”)或x.Attribute(“UId”)。值对于任何记录都为空,则在第一个项目中不应使用该值place@DrDonut如果正在使用选项“严格关闭”,不幸的是,它可以随心所欲。在这种情况下,您应该经常遇到问题。请不要在VB中使用XML的字符串文本。VB有XML文本
Dim alarmNw=
@GSerg我已经更新了我的答案,以反映问题中的代码。谢谢!有没有其他线索?它也在一个新的虚拟机上,但安装了相同的软件…@DrDonut。我不确定发生了什么变化,但如果您不使用.value,而是使用CStr(),则可以使其不出错Dim highUId As Integer=alarmNw.subjections().Max(函数(x)Convert.ToInt32(CStr(x.Attribute(“UId”)))
尽管这不是一个好代码