簡體   English   中英

將功能從vb轉換為c#時遇到麻煩

[英]trouble converting function from vb to c#

我正在嘗試將自己遷移到僅使用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

holidayFile是一個文本文件,其中包含以下內容;

01/01/2015 01/19/2015 02/16/2015 04/03/2015 05/25/2015 07/03/2015 09/07/2015 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一樣,具有許多相同的好處。 請注意,它也較短,如果需要,仍可以輕松轉換為List。 當我在這里時,由於您來自字符串,因此使用DateTime.Parse()方法可能會更好:

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

通常,編寫代碼返回IEnumerable<T>而不是List<T>幾乎總是更好。 您幾乎沒有什么損失,因為您總是可以在需要時僅將.ToList()追加到此類函數的末尾,並且在從一種基礎集合類型更容易地重構為另一種基礎集合類型以及通過減少RAM的使用或避免循環遍歷List中的項目,后來發現您根本不需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM