Phi*_*ace 0 c# string winforms
我有一个具有可配置延迟(Timespan)的工具,我想根据值设置标签的文本.这是我的代码:
StringBuilder time = new StringBuilder();
if (Settings.Default.WaitPeriod.Hours > 0)
{
time.AppendFormat("{0} hour(s)", Settings.Default.WaitPeriod.Hours);
}
if (Settings.Default.WaitPeriod.Minutes > 0)
{
time.AppendFormat("{0}{1} minute(s)", time.Length > 0 ? " and " : "", Settings.Default.WaitPeriod.Minutes);
}
if (Settings.Default.WaitPeriod.Seconds > 0)
{
time.AppendFormat("{0}{1} second(s)", time.Length > 0 ? " and " : "", Settings.Default.WaitPeriod.Seconds);
}
this.questionLabel.Text = String.Format("What have you been doing for the past {0}?", time);
Run Code Online (Sandbox Code Playgroud)
我发现"(s)"特别令人恼火 - 但不要想要一百万if/ternary if语句.
因此,忽略非本地化字符串,您能想到更好的方法吗?
private void AddValue(StringBuilder time, int units, string unitLabel)
{
if (units > 0)
{
if (0 < time.Length)
{
time.Append(" and ");
}
time.AppendFormat("{0} {1}{2}", units, unitLabel, (1 == units ? String.Empty : "s"));
}
}
private void YourExistingMethod()
{
StringBuilder time = new StringBuilder();
AddValue(time, Settings.Default.WaitPeriod.Hours, "hour");
AddValue(time, Settings.Default.WaitPeriod.Minutes, "minute");
AddValue(time, Settings.Default.WaitPeriod.Seconds, "second");
this.questionLabel.Text = String.Format("What have you been doing for the past {0}?", time);
}
Run Code Online (Sandbox Code Playgroud)