日期属性的命名约定

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偷来的。

所以问题是:有人对日期有更好的命名约定吗?

drf*_*drf 6

属性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)

输出显示了几个适当的约定。

  1. ______Date, ____Time(例如:System.Net.Mime.ContentDisposition.CreationDate, System.Net.HttpWebRequest.Date, System.Timers.ElapsedEventArgs.SignalTime)。Date当日期和时间都可以返回时,单独使用可能会令人困惑,但Time单独使用可以被认为不那么模糊。(返回没有日期的时间的属性的返回类型为 ,TimeSpan而不是DateTime。)

  2. _____DateTime, _____TimeStamp. (实施例:System.Globalization.GregorianCalendar.MinSupportedDateTimeSystem.Diagnostics.TraceEventCache.DateTimeSystem.Net.Cookie.Timestamp)。这个约定很冗长,但很明确的是整个时间戳(日期+时间)是有意的。

  3. 两者都不。(实施例:System.Net.FtpWebResponse.LastModifiedSystem.Globalization.DaylightTime.StartSystem.Net.Cookie.Expires)。名称中不包含返回类型与大多数属性名称一致(String.Length, not String.LengthInt)。

由于没有一致的方法,这些模式中的任何一个都可能被认为是可接受的。

然而,作为偏好,DateFileOpened建议一个文件只能打开一次。如果不是这种情况,属性名称(例如FileLastOpened,甚至只是简单地)LastOpened可能暗示DateTime返回类型,而不在属性名称中包含返回类型。如果无法避免,那么像这样的名称FileOpenedTime符合 .NET 准则,符合 Framework 属性名称,并且不含糊。


Ben*_*ith 5

当在DateTime变量中指定“日期”时,我也不太喜欢这种冗余。

或者,您可以使用:

DateTime OpenedOn { get; set; }
Run Code Online (Sandbox Code Playgroud)

如果读者不了解上下文,则命名方法很难。如果此方法存在于用于存储文件属性的类中,则:

var fileOpenedOn = file.OpenedOn;
Run Code Online (Sandbox Code Playgroud)

会读得很好。