将函数从 vb 转换为 C# 时遇到问题
trouble converting function from vb to c#
我正在尝试将自己迁移到仅使用 C#(was/am 一个 vb.net 人)
我在从一个正在迁移到 C#
的项目中转换这个 vb.net 函数时遇到问题
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-02-16
2015 年 4 月 3 日
2015/05/25
07/03/2015
2015 年 9 月 7 日
11/26/2015
12/25/2015
感谢任何帮助,streamreader 可能是更好的阅读方式?
你可以做到
public static List<DateTime> GetHolidays(string holidaysFile)
{
string[] sAllDates = File.ReadAllLines(holidaysFile);
return (from sDate in sAllDates select Convert.ToDateTime(sDate)).ToList();
}
这与原文相符:
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));
}
作为一般规则,您几乎总是最好将代码编写为 return 和 IEnumerable<T>
而不是 List<T>
。您不会有什么损失,因为您可以 always 只需在需要时将 .ToList()
附加到此类函数的末尾,并且在更容易重构方面可以获得很多好处通过减少 RAM 使用或避免循环遍历 List 中的项目,将基础集合类型转换为另一种并潜在地提高性能,后来证明您根本不需要。
我正在尝试将自己迁移到仅使用 C#(was/am 一个 vb.net 人) 我在从一个正在迁移到 C#
的项目中转换这个 vb.net 函数时遇到问题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-02-16 2015 年 4 月 3 日 2015/05/25 07/03/2015 2015 年 9 月 7 日 11/26/2015 12/25/2015
感谢任何帮助,streamreader 可能是更好的阅读方式?
你可以做到
public static List<DateTime> GetHolidays(string holidaysFile)
{
string[] sAllDates = File.ReadAllLines(holidaysFile);
return (from sDate in sAllDates select Convert.ToDateTime(sDate)).ToList();
}
这与原文相符:
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));
}
作为一般规则,您几乎总是最好将代码编写为 return 和 IEnumerable<T>
而不是 List<T>
。您不会有什么损失,因为您可以 always 只需在需要时将 .ToList()
附加到此类函数的末尾,并且在更容易重构方面可以获得很多好处通过减少 RAM 使用或避免循环遍历 List 中的项目,将基础集合类型转换为另一种并潜在地提高性能,后来证明您根本不需要。