【问题标题】:VB Code to C# - Namespace Microsoft.VisualBasicVB 代码到 C# - 命名空间 Microsoft.VisualBasic
【发布时间】:2018-08-22 09:46:13
【问题描述】:

我正在将 VB 代码转换为 C#。以下是代码。

CrByMonthCr = Val(DateDiff("m", StartDate, DateSerial(Year(EndDate), Month(EndDate), 1)) + 1) * MonthCr

在 C# 代码中,我导入了命名空间 - using Microsoft.VisualBasic。 我只设法解决了DateDiff 功能。 Val & DateSerial 给出编译器错误。

CrByMonthCr = Val(DateAndTime.DateDiff("m", StartDate, DateSerial(Year(EndDate), Month(EndDate), 1)) + 1) * MonthCr

有谁知道为什么尽管导入了 VisualBasic 的命名空间,但它会给出错误?如何解决?

DateSerial 在当前上下文中不存在

【问题讨论】:

  • 它给出了什么错误?
  • 错误 - DateSerial 在当前上下文中不存在
  • 很多Microsoft.VisualBasic 功能(肯定是.NET 版本1 的东西,在所有My 东西被添加之前)被有效地投入以最小化VB 6 和VB 之间的转换。网。继续使用该功能的唯一原因是,如果您试图保持与某些 pre-.NET VB 代码的 bug-for-bug 兼容。如果没有,我建议现在是时候探索每个函数的作用,然后确定使用普通的非 VB 框架类实现该目标的标准方法。
  • 我必须同意@Damien_The_Unbeliever。您应该做的第一件事是修改您的 VB 代码以删除所有 VB 特定的代码。一旦都是标准的 .NET 代码,那么将其转换为 C# 将很简单。
  • 这是 2 个月的误导 - 请参阅有关该主题的帖子 - stackoverflow.com/questions/4638993/…

标签: c# vb.net vb6


【解决方案1】:

DateSerial 作为静态方法存在于Microsoft.VisualBasic.DateAndTime 类中,因此要继续使用它,您需要DateAndTime.DateSerial(Year(EndDate), Month(EndDate), 1)
但你可以简单地将其替换为new DateTime(EndDate.Year, EndDate.Month, 1)

【讨论】:

  • 我建议您稍微更改一下答案,因为 Anup 要求转换。基于此,我相信您的第二个答案是好的答案。
【解决方案2】:

正如 Zohar Peled 所说,DateSerialDateAndTime 的成员。 ValConversion 的成员。所以完整的代码(using Microsoft.VisualBasic;)是

CrByMonthCr = Conversion.Val(DateAndTime.DateDiff("m", StartDate, DateAndTime.DateSerial(DateAndTime.Year(EndDate), DateAndTime.Month(EndDate), 1)) + 1) * MonthCr;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2014-09-02
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    相关资源
    最近更新 更多