【发布时间】:2020-11-08 03:00:01
【问题描述】:
在我的项目中,我将一些 vb.net 转换为 c#,我来到了这一行:
int thisdigit = Fix(countervalue / (Math.Pow(10, (numdigits - j - 1)))) - Fix(countervalue / (Math.Pow(10, (numdigits - j)))) * 10;
但我得到了错误:
The name 'Fix' does not exist in the current context
我该如何解决这个问题?我不明白为什么 Fix() 不存在。
但是,如果我改用Math.Truncate(),那将不起作用,因为thisdigit 是int。
我怎么能改变它?
这是我原来的 vb.net 代码:
dim dg as int
dg = Fix(value / (10 ^ (digits - j - 1))) - Fix(value / (10 ^ (digits - j))) * 10
这是我要转换的内容的链接: https://www.developerfusion.com/code/3734/aspnet-graphical-page-hit-counter/
该代码适用于我的 vb.net 项目。我已经通过调试器运行了转换后的代码,我唯一能看到任何问题的地方就是这一行。
我也想出了这个:
double thisdigit = Math.Truncate((double)(countervalue / (10 ^ (numdigits - j - 1)))) - Math.Truncate(((double)(countervalue / (10 ^ (numdigits - j))) * 10));
【问题讨论】:
-
修复在 VB.net 代码中有什么作用?你为什么要写这段代码?
-
无论如何你都不应该在 VB 中使用
Fix。这是 VB6 的保留,这就是它特定于 VB.NET 而不是 C# 的原因。如果您一开始就编写了“正确的”VB.NET 代码,那么您几乎可以附加一个分号并完成 C# 转换。你应该做的是正确理解你的代码实际在做什么,在 VB 中编写最好的 .NET 代码来做到这一点,然后将其转换为 C#。 -
在 Microsoft.VisualBasic 命名空间下的 Microsoft .VisualBasic.dll 库中有一堆类型和成员,它们基本上是对 VB6 类型和成员的重新实现。它们的存在主要是为了让 VB6 代码无需大量更改即可升级到 VB.NET,也让 VB6 开发人员对 VB.NET 感到更加熟悉。如果您引用该库,则可以在 C# 中使用这些类型和函数,但这通常是个坏主意。
Fix实际上是Microsoft.VisualBasic.Conversion模块的成员,在C#中可以看作是一个静态类。 -
原代码不是我写的……
-
@JohnG 呃,字符串中的所有数字都已经是
int。该行的问题是,如果我使用Math.Truncate()而不是Fix(),它将不起作用,因为Math.Truncate()仅适用于double。
标签: c# vb.net code-conversion