【问题标题】:trouble converting function from vb to c#将函数从 vb 转换为 c# 时遇到问题
【发布时间】:2015-01-10 02:41:29
【问题描述】:

我正在尝试将自己迁移到仅使用 C#(曾经/现在是 vb.net 人) 我无法将此 vb.net 函数从我正在迁移到 C# 的项目中转换

Public Shared Function GetHolidays(ByVal holidaysFile As String) As List(Of Date)
    Dim sAllDates() As String = File.ReadAllLines(holidaysFile)
    Return (From sDate In sAllDates Select CDate(sDate)).ToList()
End Function

holidaysFile 是一个包含此类项目的文本文件;

2015 年 1 月 1 日 2015 年 1 月 19 日 2015 年 2 月 16 日 2015 年 4 月 3 日 2015 年 5 月 25 日 2015 年 7 月 3 日 2015 年 9 月 7 日 2015 年 11 月 26 日 2015 年 12 月 25 日

任何帮助表示赞赏,并且流式阅读器可能是阅读此内容的更好方法?

【问题讨论】:

    标签: c# vb.net


    【解决方案1】:

    你可以的

    public static List<DateTime> GetHolidays(string holidaysFile)
    {
        string[] sAllDates = File.ReadAllLines(holidaysFile);
        return (from sDate in sAllDates select Convert.ToDateTime(sDate)).ToList();
    }
    

    【讨论】:

    • ty,可用时不接受。是否有与 vb 中的 Weekday 函数等效的 C#?我找不到一个。在 c# 中使用 .DayoFWeek 返回一个 int,其中 vb 函数返回 DayOfWeek.Sunday 等的枚举
    • 此外,您可以非常轻松地将 enum 转换为 int。
    • 是的,但我想如果已经有类似的东西,为什么还要麻烦。泰
    【解决方案2】:

    这与原文相符:

    public static List<DateTime> GetHolidays(string holidaysFile)
    {
        return File.ReadAllLines(holidaysFile).Select(d => Convert.ToDateTime(d)).ToList();
    }
    

    但是除非真的需要它,否则使用这样的 List 会让我很生气。下面的代码将允许您进行惰性求值,一次只支持在 RAM 中保留一行,并且通常仍然可以在不更改调用代码的情况下工作——许多与使用 StreamReader 相同的好处。请注意,它也更短,如果需要,仍然可以轻松转换为列表。当我在这里时,由于您来自字符串,因此使用DateTime.Parse() 方法可能会做得更好:

    public static IEnumerable<DateTime> GetHolidays(string holidaysFile)
    {
        return File.ReadLines(holidaysFile).Select(d => DateTime.Parse(d));
    }
    

    作为一般规则,您最好编写代码以返回 IEnumerable&lt;T&gt; 而不是 List&lt;T&gt;。您几乎没有什么可失去的,因为您可以总是在需要时将.ToList() 附加到此类函数的末尾,并且在从一种基础集合类型到另一种更容易重构方面获得很多好处并通过减少 RAM 使用或避免循环列表中的项目来潜在的性能改进,后来证明你永远不需要。

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 2019-12-22
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      相关资源
      最近更新 更多