回答
爲了簡單起見,我可能會使用int,並確保在setter中驗證year值是否合理。
另外,您可以創建一個類型來代表年份 - 這將確保您不會誤用年份作爲常規整數值。儘管這會變得複雜,特別是如果你想開始重載運算符來支持年份加法和減法。除非你真的需要這種額外的安全級別,否則我會堅持一個int。
使用DateTime對象,你可以得到一年就喜歡.year好....
如果它一定會成爲一個年份值,則INT會更簡單。您也可以考慮將發佈日期保存爲DateTime,並從中獲取年份(而不是年份屬性)。
這就是我即將發佈的答案。除非您也跟蹤發佈日期,否則請使用Int。 – 2009-12-28 18:16:24
謝謝,好點。 – 2009-12-28 18:24:52
那麼,DateTime具有指定數據和時間的不幸副作用,而不僅僅是一些子集。理想情況下,您可能需要一些具有不同準確度級別的「時間」對象。但是對於這個我建議使用int
,因爲你只是建模一年,而不是完整的日期。
我認爲要正確回答這個問題,您需要提供更多的上下文。什麼樣的應用程序?這些信息是否會存儲在數據庫中?您希望用戶針對數據執行哪種查詢?像這樣的東西。
Thansk,這是一個電影收藏應用程序。所以今年將會有一個xml已經存在,我會閱讀,並提供按年選擇電影的選項,或顯示某一年份的電影等等。 – 2009-12-28 18:26:34
如果你只是想跟蹤Year
,然後保持int
。如果您正在跟蹤發佈日期/生產日期,則使用DateTime
我會創建一個自定義類型(結構)來保存此值。
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);
感謝好奇心,爲什麼你沒有公開構造函數? – 2009-12-28 18:37:40
兩個原因:1)它將訪問語法標準化爲更一致地類似於enum(通過靜態工廠方法)的訪問語法,以及2)強制所有初始化通過該工廠方法......在這個簡化的例子中,影響,但隨着這種結構變得更加複雜,它可以讓一個共同的入口點更容易管理。 – 2009-12-28 20:17:16
如果它只是曾經打算在今年再一個int
(或自定義類型)會做。
如果您想存儲月份,那麼我會使用DateTime
。
敏捷咒語 - YAGNI(你不會需要它) - 會建議一個int
,直到你想要更多的信息,然後重構爲DateTime
。
感謝來自int,你真的可以這樣做嗎?我不知道你可以有一個從Int繼承的類型。 – 2009-12-28 18:21:59
@Joan Venge - 你是對的。 'int'是一個「密封」類。答案已更新。 – ChrisF 2009-12-28 18:26:52
呵呵,謝謝.... – 2009-12-28 18:27:40
爲了簡單起見,使用int
是最直接的選擇;如果有任何特殊的數據處理方法,那麼創建一個Year
類型並封裝所有行爲將是一個乾淨而簡單的解決方案 - 如果你走這條路線,你可以將該值存儲爲int
或DateTime
並提供.ToInt(), .ToDateTime(),方法和其他來處理所有的用例。
如果這是針對臨時用戶,則int(或基於int的類)是正確的。
如果你正在做一個'真正'的電影,你需要一個int和一個字符串:用於排序和搜索的int,字符串包含數據不完整或暫定的情況的「真值」 「1958年?」)。
這也是爲什麼你不應該使用日期或日期時間:沒有辦法區分「1/1/1958」和「1958年的某個時候」。
- 1. 如何在C#中實現電影導演和演員?
- 2. 如何在C#中爲電影實現繪圖關鍵字?
- 3. 如何在C#中實現電影的運行時?
- 4. 如何實現舊的電影效果?
- 5. 如何在電報bot中實現自動完成搜索電影名稱
- 6. 如何實現投影畫?
- 7. 如何實現與CRM在線2015年
- 8. 如何在電話中實現分頁
- 9. 增強現實android(andAR)電影紋理
- 10. vtable如何在C++和c#中實現?
- 11. 如何在C或C++中實現SDP?
- 12. 實時軟陰影 - 你如何在OpenGL中實現?
- 13. 在Swift 3中使用MobileVLCkit實現電影
- 14. 如何在Google電影中包含電影放映時間?
- 15. 如何在Flash中更換電影電影 - 裝扮遊戲
- 16. 如何實現在C#
- 17. 你如何使電影像電影.netflix.com
- 18. 如何使用C實現某一年和數量的搜索#
- 19. 如何在C++中提供實現?
- 20. 如何才能在match.success C#中實現?
- 21. 如何在C#中實現malloc操作#
- 22. 如何在C#中實現八叉樹?
- 23. 如何在C++中實現矢量
- 24. 如何在C#中實現多態#
- 25. 如何在C#中實現glob#
- 26. 如何在xslt中實現「uniq -c」?
- 27. 如何在C++中實現回調?
- 28. 如何在C中實現註釋?
- 29. 如何在c中實現Python socket.unwrap()?
- 30. 如何在C++中實現類組合?
這與'System.DateTime'表示一年的方式一致。如果您要量化時間,那麼最好使用「System.TimeSpan」或「System.Globalization.Calendar」。 – 2009-12-28 18:26:02