3

这不是一个问题,而是一个征求意见的请求。

我一直讨厌在作为日期或日期时间类型的命名属性或变量中包含日期例如:

DateTime DateFileOpened {get; set;}

对我来说,我似乎在变量名中包含了数据类型。

我决定使用“何时”代替日期,例如

DateTime WhenFileOpened {get; set;}

一般来说,我是从布尔变量/属性中使用 Is 或 Has 偷来的。

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

4

3 回答 3

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);

输出显示了几个约定。

  1. ______Date, ____Time(例如:System.Net.Mime.ContentDisposition.CreationDate, System.Net.HttpWebRequest.Date, System.Timers.ElapsedEventArgs.SignalTime)。Date当日期和时间都可以返回时,使用by 本身可能会令人困惑,但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返回类型,而不包括属性名称中的返回类型。如果无法避免,则 like 名称FileOpenedTime符合 .NET 准则,符合 Framework 属性名称,并且明确。

于 2013-11-14T04:33:28.567 回答
6

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

作为替代方案,您可以使用:

DateTime OpenedOn { get; set; }

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

var fileOpenedOn = file.OpenedOn;

会读得很好。

于 2013-11-14T00:38:25.040 回答
-5

我通常使用“date_”作为前缀:

date_created
date_end
date_deleted
date_modified

然后您可以将日期命名约定为“date_FileOpened”

于 2013-10-04T16:26:34.003 回答