Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 编译器中的更改?_Vb.net_Visual Studio 2019 - Fatal编程技术网

Vb.net 编译器中的更改?

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,它包含一组子体,其中一些

对于一个曾经在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未设置为对象的实例。

我在报纸上找不到关于这件事的任何消息

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

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”)))
尽管这不是一个好代码