我有一个带有两个可选参数的方法。我想缩短代码。
这是我的代码:
DataTable dtList;
if (!duration.ContainsKey("startDay") && duration.ContainsKey("endDay"))
{
dtList = GetAllReservation();
}
else if (duration.ContainsKey("startDay") && !duration.ContainsKey("endDay"))
{
dtList = GetAllReservation(duration["startDay"]);
}
else
{
dtList = GetAllReservation(duration["startDay"], duration["endDay"]);
}
有什么方法可以将这段代码缩短为:
dtList = GetAllReservation(duration["startDay"], duration?["endDay"]);
这是我的方法GetAllReservation:
public static DataTable GetAllReservation(string start = "1397/01/01", string end = "1400/12/29") =>
DataAccess.Select($"Exec ReservationList '{start}', '{end}'", ref _methodState);
答案 0 :(得分:2)
请勿将参数default定义为业务默认值。将参数default定义为null,表示缺少值。该方法本身应检查默认参数,并根据需要替换业务默认值。
uint64_t
此外,您可以在Dictionary上编写扩展方法:
public static DataTable GetAllReservation(string start = null, string end = null)
{
if (start == null) start = _config.GetDefaultStartDate();
if (end == null) end = _config.GetDefaultEndDate();
DataAccess.Select($"Exec ReservationList '{start}', '{end}'", ref _methodState);
}
这可以使您缩短对此的通话:
public static string GetStringOrNull(this Dictionary<string,string> source, string key)
{
if (!source.ContainsKey(key)) return null;
return source[key];
}
答案 1 :(得分:1)
你可以这样做
$branch = 'select_name';
$query = "
SELECT
your_field
FROM
[".${'connection_'.$branch.'_db'}."].['table_name']
";
$rs = ${'connection_'.$branch}->execute($query);
答案 2 :(得分:1)
尝试一下,
dtList = GetAllReservation(duration.ContainsKey("startDay")?duration["startDay"]:"1397/01/01",duration.ContainsKey("endDay")?duration["endDay"]:"1400/12/29");
答案 3 :(得分:0)
这里不需要可选参数(如果您确实想要较短的代码版本,并且可能更易读):
string startDayDuration = duration.ContainsKey("startDay") ? duration["startDay"] : "1397/01/01";
string endDayDuration = duration.ContainsKey("endDay") ? duration["endDay"] : "1400/12/29";
dtList = GetAllReservation(startDayDuration, endDayDuration);
然后使用您的方法
public static DataTable GetAllReservation(string start, string end) =>
DataAccess.Select($"Exec ReservationList '{start}', '{end}'", ref _methodState);
答案 4 :(得分:0)
我认为,良好的编程不一定意味着较短的代码。将每种情况视为单独的方法可能很有价值。如果每种方法都具有特定的功能,则每种方法的逻辑将变得更简单。它还减少了编码错误和可能的异常。 在这种情况下,您有3种方法。每种方法根据参数的数量执行略有不同的工作,但最后返回相同的结果。这看起来是方法重载的一个很好的例子。我相信方法重载是好的,只要方法仅使用不同的参数才真正执行相同的核心功能。有人认为方法重载是邪恶的。