标题可能需要更改。
我有一个有TurnTime_MinHours和TurnTime_MaxHours列的表。看上去像这样
TurnTime_MinHours | TurnTime_MaxHours
---------------------------------------
0 24 //represents 1 day
24 48 //represents 1-2 days
24 72 //represents 2-3 days
24 120 //represents 1-5 days现在,问题出现在我的MVC应用程序的View部分。我想以一种友好的方式显示这些数据,比如"1天“、"1-3天”、"1-5天“,而不是整数值。
我首先尝试创建一个小的switch case函数来实现这一点,但是我遇到了将int字段转换为string字段的问题。
我只是为类似的情况实现了三元结构,但我不确定它在这种情况下是否有效。三元参考:Handling tinyInt booleans with MVC
发布于 2014-02-13 19:42:58
类似的情况--您可以将您的范围添加到Tuple<int, int>中,然后使用TimeSpan.TotalDays进行转换:
Update:一种替代的、不那么冗长的处理方法(由于可读性,我不会进一步减少这种情况):然而,这种方法牺牲了一些性能,因为即使在不使用时,它也会运行第一个TimeSpan实例转换。假设只有一个实例(当范围为1天),这可能是可以接受的,而且看起来更好。
Func<Tuple<int, int>, string> getDaysFromHoursAlternate = range =>
{
string format = range.Item2 > 24 ? "{0} - {1} days" : "{1} day";
return string.Format(format,
TimeSpan.FromHours(range.Item1).TotalDays,
TimeSpan.FromHours(range.Item2).TotalDays
);
};原始答案w/完整代码:
class Program
{
static void Main(string[] args)
{
List<Tuple<int, int>> ranges = new List<Tuple<int, int>>()
{
new Tuple<int, int>(0, 24),
new Tuple<int, int>(24, 48),
new Tuple<int, int>(24, 72),
new Tuple<int, int>(24, 120)
};
Func<Tuple<int, int>, string> getDaysFromHours = range =>
{
string formatted;
if (range.Item2 > 24)
{
formatted = string.Format(
"{0} - {1} days",
TimeSpan.FromHours(range.Item1).TotalDays,
TimeSpan.FromHours(range.Item2).TotalDays
);
}
else
{
formatted = string.Format("{0} day",
TimeSpan.FromHours(range.Item2).TotalDays
);
}
return formatted;
};
ranges.ForEach(r =>
Console.WriteLine(getDaysFromHours(r))
);
Console.ReadKey();
}
}https://stackoverflow.com/questions/21763761
复制相似问题