如何在C#中省略变量,将含TimeSpan.TotalHours的插值字符串写为单行?
解决方案
当然可以在最新版C#/.NET中实现单行代码,无需声明额外变量,这里提供两种常用方式:
方式一:直接重复创建TimeSpan(简单直观)
这种方式逻辑最简单,虽然会创建两个TimeSpan实例,但对于这个场景来说性能影响可以忽略:
using System; namespace Whatever { public class DoesNotMatter { public static string MinsToHoursAndMins(int Mins) => $"{(int)TimeSpan.FromMinutes(Mins).TotalHours}.{TimeSpan.FromMinutes(Mins):mm}"; } }
方式二:利用C# 7.0+的表达式内变量声明(只创建一次TimeSpan)
如果想避免重复创建TimeSpan,可以用C# 7.0及以上支持的表达式内变量声明,在字符串插值里直接定义并复用变量:
using System; namespace Whatever { public class DoesNotMatter { public static string MinsToHoursAndMins(int Mins) => $"{(int)(var ts = TimeSpan.FromMinutes(Mins)).TotalHours}.{ts:mm}"; } }
两种方式都能把方法写成单行,且不需要额外声明SensibleTimes变量。其中第二种方式只创建一次TimeSpan实例,更高效,不过需要你的项目使用C# 7.0或更高版本(对应.NET Framework 4.7.2+、.NET Core 2.0+或.NET 5+)。
内容的提问来源于stack exchange,提问作者J. Mini
相关产品推荐
相关产品推荐

