日期属性的命名约定

时间:2013-10-04 16:18:11

标签: c# datetime naming naming-conventions

这不是一个问题,而是一个评论请求。

我一直讨厌在命名属性或变量中包含 date ,这是一种日期或日期时间。例如:

DateTime DateFileOpened {get; set;}

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

我已经确定的是使用“何时”代替日期,例如

DateTime WhenFileOpened {get; set;}

通常,我在布尔变量/属性中使用Is或Has来窃取这个。

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

3 个答案:

答案 0 :(得分:4)

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

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

DateTime OpenedOn { get; set; }

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

var fileOpenedOn = file.OpenedOn;

读得不错。

答案 1 :(得分:3)

MSDN naming conventions for properties规定,属性的名称应该是名词或名词短语,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.CreationDateSystem.Net.HttpWebRequest.DateSystem.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,而不是String.LengthInt)一致。

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

    然而,作为优先选择,DateFileOpened表明文件只能打开一次。如果不是这种情况,则FileLastOpened或甚至简称LastOpened等属性名称可能意味着DateTime返回类型,而不在属性名称中包含返回类型。如果无法避免,那么像FileOpenedTime这样的名称与.NET指南一致,与Framework属性名称一致,并且是明确的。

答案 2 :(得分:-2)

我通常使用" date _"作为前缀:

date_created
date_end
date_deleted
date_modified

然后您可以将日期的命名约定作为" date_FileOpened"