如何在C#中实现电影年份?

时间:2009-12-28 18:12:17

标签: c# .net

我正在编写一个具有Year属性的Movie类。它应该只是一个int,还是应该使用DateTime对象?

只是想知道最好的选择。也许我错过了什么。

10 个答案:

答案 0 :(得分:14)

为简单起见,我可能会使用int,并确保在setter中验证年份值是否有意义。

或者,您可以创建一个仅代表年份的类型 - 这样可以确保您不会将年份误用为常规整数值。这变得复杂,特别是如果你想开始重载运算符以支持年加法和减法。除非你真的需要这种类型安全的额外级别,否则我会坚持使用int。

答案 1 :(得分:6)

如果它只是一年的值,那么int会更简单。您还可以考虑将发布日期保存为DateTime,并从中获取年份(而不是具有年份属性)。

答案 2 :(得分:4)

如果它只是一年,那么int(或自定义类型)就可以。

如果您想存储月份,那么我会使用DateTime

敏捷口头禅 - YAGNI(你不会需要它) - 会建议int,直到你需要更多信息,然后重构为DateTime

答案 3 :(得分:1)

使用日期时间对象,你可以从中获得年份。就好了....

答案 4 :(得分:1)

嗯,DateTime具有指定数据和时间的不幸副作用,而不仅仅是一些子集。理想情况下,您可能需要一些具有不同精度级别的“时间”对象。但是为此,我建议使用int,因为你的模型只有一年,而不是一个完整的日期。

答案 5 :(得分:1)

我会创建一个自定义类型(结构)来保存这个值。

public struct FilmYear
{
   private int yr;
   private bool isDef;
   public bool HasValue { return isDef; }
   public bool IsNull { return !HasValue; }
   private FilmYear(int year) { yr = year; isDef = true; }

   public static FilmYear ThisYear = new FilmYear(DateTime.Today.Year);
   public static FilmYear LastYear = new FilmYear(DateTime.Today.Year - 1);
   public static FilmYear NextYear = new FilmYear(DateTime.Today.Year + 1);
   public static FilmYear Parse(DateTime anyDateInYear)
   { return new FilmYear(anyDateInYear.Year); }
   public static FilmYear Parse(int year)
   { return new FilmYear(year); }
   public static FilmYear Parse(string year)
   { return new FilmYear(Int32.parse(year)); }
   public overide string ToString()
   { return yr.ToString(); }
   //etc... you can add: 
   //  - operator overloads to add subtract years to the value,
   //  - conversion operator overloads to implicitly/(or explicitly) 
   //    convert datetimes to FilmYears, as appropriate
   //  - overload equality and comparison operators ... 
}

用法

 FilmYear avatarYear = FilmYear.ThisYear; 
 FilmYear casablancaYear = FilmYear.Parse(1943); 

答案 6 :(得分:1)

如果这适用于临时用户,则int(或基于int的类)是正确的。

如果你正在做一个'真实的'电影摄影,你需要一个int和一个字符串:用于排序和搜索的int,包含数据不完整或暂定的情况的“真相”的字符串(“ 1958?“)。

这也是你不应该使用Date或DateTime的原因:没有办法区分“1/1/1958”和“1958年的某个时间”。

答案 7 :(得分:0)

我认为要正确回答这个问题,你需要提供更多的背景信息。对于什么样的应用?这些信息是否会存储在数据库中?您希望用户对数据执行哪些类型的查询?这样的事情。

答案 8 :(得分:0)

如果您只想跟踪Year,请将其保留为int。如果您要跟踪发布日期/生产日期,请使用DateTime

答案 9 :(得分:0)

为简单起见,使用int是最直接的选择;如果数据有任何特殊方法,那么创建Year类型并封装所有行为将是一个干净而简单的解决方案 - 如果你走这条路线,你可以将值存储为intDateTime并提供.ToInt(),. ToDateTime(),方法和其他来处理所有用例。