2016-01-09 71 views
-5

有沒有什麼辦法可以比較下面的if語句中的時間和空值是否有效?請詳細解釋我。關於c的常見問題#

static DateTime time; 

if (time == null) 
{ 
    /* do something */ 
} 
+0

你可以[試試](https://dotnetfiddle.net/)相當容易,看看會發生什麼... –

+0

你也標記這個'c'的任何理由? (之前編輯過的'java') –

+0

我在問一個問題。沒有給出任何答案。如果你沒有答案,請不要做無關緊要的評論。 –

回答

2

DateTime是一個struct,這意味着它是一個值類型,而不是引用類型。 null是一個只適用於參考的概念。值類型在邏輯上不可能是null

Java通過創建包裝類型(比較int及其對應類Integer)來解決此問題。但是,C#採用不同的方法,使用nullables的概念。

創建一個空值很簡單,只需在原始類型中添加一個?即可。

static DateTime? time; 

這可能會導致比較if (time == null),要成爲true

0

由於DateTime的是,你不能分配空給它的值類型,但正好爲空的介紹這些情況下(沒有值) - 改用可爲空的日期時間:從這裏

參考:Set an empty DateTime variable

DateTime? myTime = null;

在C#

DateTime? time = null; 

if (time == null) 
{ 
    /* do something */ 
} 

修改後的代碼將工作在C#

+1

你能解釋一下你在這裏做了什麼嗎?確保有人閱讀這篇文章,看看你做了什麼 - 這個問號是做什麼的?爲什麼在編譯版本時沒有編譯?什麼是功能差異? –

0

既然你還沒有賦值的變量時,你不能把它進行比較。另外,由於Datetime不是可以爲空的對象,因此不能將其指定爲null。

+0

它被標記爲'static',因此它可能出現在類定義中,在這種情況下,即使它沒有明確定義,您也可以在比較中使用它。 –

1
  1. 使用DateTime.MinValue爲有效日期時間是默認
static DateTime time; 
if (time == DateTime.MinValue){/* do something */} 
  • FF你應該使用值 「DateTime.MinValue」 實際上,也許可以爲可空的類型
  • static Nullable<DateTime> time;// same as static DateTime? time; 
    
    if (time.HasValue) 
    { 
        /* do something */ 
    }