6

我使用 Artinsoft 的 VB6 到 .NET 向导将 VB6 应用程序转换为 C#,并且在之前使用 Err.Number 的任何地方都会收到升级警告;

//UPGRADE_WARNING: (2081) Err.Number 有一个新的行为。

转换后的代码是指;

Microsoft.VisualBasic.Information.Err().Number

我没有任何运气发现有什么区别。有谁知道它可能是什么,或者忽略这个警告是否安全?

更新

对于将来偶然发现这个问题的任何人 - 一个警告;在 C# .NET 应用程序中继续使用 Err.Number 是不安全的。该属性仍然可用,但是在出现错误后未按预期填充它。按预期填充的唯一情况是错误来自 COM 组件。

正常的错误,例如 DB 访问、IO 操作等,不会给 Err().Number 赋予任何价值,因此遗憾的是必须重构它的使用。

奇怪的是,在 VB .NET 中,它仍然可以按预期工作,因此在决定要转换的目标语言时,也许需要牢记这一点。

4

3 回答 3

4

基本上 VB.NET 支持 Err.Number 属性,它的工作原理与 VB6 中的几乎相同,但是当升级到 C# 时,Microsoft.VisualBasic.Information.Err().Number 没有正确填充,你不应该依靠它。

唯一确定设置错误号的情况是,错误是由 COM 互操作组件生成的,在这种情况下,您可以检查异常的 InnerException 成员中的错误号。

您应该将所有 Err.Number 用法转换为 .NET 异常,并修改逻辑以使用结构化错误处理正确运行。

问候

于 2010-09-24T21:33:27.163 回答
1

VB6 Err.Number 的描述自 2000 年 10 月 MSDN:

Returns or sets a numeric value specifying an error. Number is the Err object's default property. Read/write.

来自MSDN的 VB.NET Err.Number 的描述:

Returns or sets a numeric value specifying an error. Read/write.

2000 年 10 月 MSDN 的注释逐字复制到 VB.NET 的在线版本中,包括示例。两者之间似乎没有什么不同。

于 2010-09-17T20:50:32.717 回答
0

也许使用的数字已经改变?

于 2010-09-17T20:53:11.727 回答