这个问题可能有点模棱两可,所以我会解释我的目标和我之前的实施。我正在寻找有关如何改进实施的建议。
我的应用程序需要一定的日期和时间(小时和分钟)才能在程序后期用作标准。
日期和时间是可变的,取决于用户是否是特定组的成员。
我之前的实现是获取所选组的名称,然后转到Web服务器并下载包含日期和时间的相应文件。每个组都有一个文件。
文本文件的格式为:
日,星期,日etc..HH,HH,MM,MM
然后将其读入两个单独的阵列,其中位置是硬编码的。例如。指数0,1,2表示天数,3,4表示小时数,5,6表示分钟数。
这种方法也意味着我需要一个更长的数组,这个数组的天数比另一个更多。
显然,这一切都非常低效,而且代码不是非常可重用或可扩展的。我必须改变是否引入了一个新组,并且文本文件中的数据更少。
编辑 - 由于问题的模糊性,我已经包含了代码:
此方法在CollectQualifyingTimes的fileName参数中传递组名。字符串看起来像gtstimes.txt或gtsdates.txt或gectimes.txt或gecdates.txt
internal static class DownloadQualifyingTimes
{
//TimeDate Arrays
public static readonly List<string> QDaysList = new List<string>();
public static readonly List<int> QTimesList = new List<int>();
private static StreamReader _reader;
private static string _line;
private static string _file;
/// <summary>
/// Collects the Times
/// </summary>
public static void CollectQualifyingTimes(string fileName)
{
Logger.Debug("About to download the " + fileName + " Qualifying Times and Dates");
FileDownload.DownloadOnlineFile(fileName);
OpenQualifyingFile(fileName);
}
/// <summary>
/// Open the qualifying file and read the values.
/// </summary>
/// <returns></returns>
private static void OpenQualifyingFile(string fileName)
{
try
{
_file = Path + "\\" + fileName;
using (_reader = new StreamReader(_file))
{
while ((_line = _reader.ReadLine()) != null)
{
if (fileName.Contains("Times"))
{
QTimesList.Add(Convert.ToInt16(_line));
Logger.Debug("Times " + _line);
}
else
{
QDaysList.Add(_line);
Logger.Debug("Days " + _line);
}
}
}
}
catch (WebException exception)
{
Logger.Error(exception);
}
}
}
//The method that calls the Downloading class looks like this:
/// <summary>
///
/// </summary>
/// <param name="selectedLeague"></param>
/// <returns></returns>
public static bool QualificationTimeCheck(string selectedLeague)
{
var currentUtcTime = DateTime.UtcNow;
//Day check regardless of league
if (DownloadQualifyingTimes.QDaysList.Contains(currentUtcTime.DayOfWeek.ToString()))
{
Logger.Debug("Qualifying day condition meet");
if (selectedLeague.IsOneOf("GTS", "CAT"))
{
Logger.Debug("GTS or CAT qualifying logic");
if (currentUtcTime.Hour ==
DownloadQualifyingTimes.QTimesList[0] ||
currentUtcTime.Hour ==
DownloadQualifyingTimes.QTimesList[1])
{
Logger.Debug("Qualifying hour condition meet");
if (((currentUtcTime.Minute > DownloadQualifyingTimes.QTimesList[2])
&& (currentUtcTime.Minute < DownloadQualifyingTimes.QTimesList[3])) || SessionObject.LastLapStartedMinute <= DownloadQualifyingTimes.QTimesList[3])
{
Logger.Debug("Qualifying minute condition meet");
return true;
}
我希望这能说明问题的本质和问题。
您能想到实施此流程的更好方法吗?如果您需要更多相关信息,请不要犹豫。
编辑 - 根据第一条评论建议结束实施列表。