THB*_*BFT 2 c# datetime naming naming-conventions
这不是一个问题,而是一个征求意见的请求。
我一直讨厌将日期包含在日期或日期时间类型的命名属性或变量中。例如:
DateTime DateFileOpened {get; set;}
Run Code Online (Sandbox Code Playgroud)
对我来说,似乎在变量名中包括了数据类型。
我确定要使用“何时”一词代替日期,例如
DateTime WhenFileOpened {get; set;}
Run Code Online (Sandbox Code Playgroud)
通常,我是通过在布尔变量/属性中使用Is或Has偷来的。
所以问题是:有人对日期有更好的命名约定吗?
属性的MSDN 命名约定规定属性的名称应该是名词或名词短语,DateFileOpened满足但不满足的标准WhenFileOpened。
在这些情况下,它可以帮助检查核心 .NET 框架类使用的属性名称。以下代码DateTime将从所有加载的程序集中提取所有类型属性的名称:
foreach (var v in AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a=>a.GetTypes())
.Where(a=>a.IsClass)
.SelectMany(a=>a.GetProperties())
.Where(a=>a.PropertyType == typeof(DateTime)))
Console.WriteLine("{0}.{1}", v.DeclaringType, v.Name);
Run Code Online (Sandbox Code Playgroud)
输出显示了几个适当的约定。
______Date, ____Time(例如:System.Net.Mime.ContentDisposition.CreationDate, System.Net.HttpWebRequest.Date, System.Timers.ElapsedEventArgs.SignalTime)。Date当日期和时间都可以返回时,单独使用可能会令人困惑,但Time单独使用可以被认为不那么模糊。(返回没有日期的时间的属性的返回类型为 ,TimeSpan而不是DateTime。)
_____DateTime, _____TimeStamp. (实施例:System.Globalization.GregorianCalendar.MinSupportedDateTime,System.Diagnostics.TraceEventCache.DateTime,System.Net.Cookie.Timestamp)。这个约定很冗长,但很明确的是整个时间戳(日期+时间)是有意的。
两者都不。(实施例:System.Net.FtpWebResponse.LastModified,System.Globalization.DaylightTime.Start,System.Net.Cookie.Expires)。名称中不包含返回类型与大多数属性名称一致(String.Length, not String.LengthInt)。
由于没有一致的方法,这些模式中的任何一个都可能被认为是可接受的。
然而,作为偏好,DateFileOpened建议一个文件只能打开一次。如果不是这种情况,属性名称(例如FileLastOpened,甚至只是简单地)LastOpened可能暗示DateTime返回类型,而不在属性名称中包含返回类型。如果无法避免,那么像这样的名称FileOpenedTime符合 .NET 准则,符合 Framework 属性名称,并且不含糊。
当在DateTime变量中指定“日期”时,我也不太喜欢这种冗余。
或者,您可以使用:
DateTime OpenedOn { get; set; }
Run Code Online (Sandbox Code Playgroud)
如果读者不了解上下文,则命名方法很难。如果此方法存在于用于存储文件属性的类中,则:
var fileOpenedOn = file.OpenedOn;
Run Code Online (Sandbox Code Playgroud)
会读得很好。