2013-05-06 81 views
2

我是很新的WPFC#所以不要怪我問這個也許愚蠢的問題。「DateTime?」之間的區別和「DateTime」。 (試圖從日期選擇器獲取值)

我有兩個我的WPF應用程序datepickers。我想在它發生變化時將DateTime取出,並將它用作應用程序中其他某些內容的變量。所以我對他們每個人是這樣的(方法自動生成VS):

private void datePicker1_SelectedDateChanged(object sender, SelectionChangedEventArgs e) 
     { 
      date1 = datePicker1.SelectedDate; 
     } 

但問題是,在日期選擇器的日期格式日期時間?不是日期時間我真的不知道那裏的問號是什麼意思,爲什麼它在那裏。我嘗試了一些研究,但沒有發現任何可以幫助我的研究。如果你看到從日期選擇器獲得日期的更好方法,你也可以幫助我。我只需要它在我的xaml.cs代碼中不在xaml中,而且我並不真正使用綁定,因爲我不確定它是否在我的情況下如何工作。

感謝您的任何答案。

編輯:我想補充的信息,它表明我這個錯誤:

Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)

回答

13

日期時間與?Nullable日期時間,它可以容納空值。對於你的情況,你可以這樣做:

private void datePicker1_SelectedDateChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if(datePicker1.SelectedDate.HasValue) 
     date1 = datePicker1.SelectedDate.Value; 
} 

Nullable<T> C#

In C# and Visual Basic, you mark a value type as nullable by using the ? notation after the value type. For example, int? in C# or Integer? in Visual Basic declares an integer value type that can be assigned null.

+0

奇怪..我在那裏添加.Value,但它沒有工作,沒有...如果thx :) – 2013-05-06 11:00:39

+1

@goodfriend,歡迎你,是的,它很奇怪,它應該只顯示'Value'的工作,但它很好的檢查'HasValue' – Habib 2013-05-06 11:14:26

0

可空的DateTime可以爲空。

DateTime結構本身不提供null選項。但DateTime?可空類型允許您將空字面賦值給DateTime類型。它在對象模型中提供了另一個間接級別。

Program that uses null DateTime struct: C#

using System; 

class Program 
{ 
    static void Main() 
    { 
    // 
    // Declare a nullable DateTime instance and assign to null. 
    // ... Change the DateTime and use the Test method (below). 
    // 
    DateTime? value = null; 
    Test(value); 
    value = DateTime.Now; 
    Test(value); 
    value = DateTime.Now.AddDays(1); 
    Test(value); 
    // 
    // You can use the GetValueOrDefault method on nulls. 
    // 
    value = null; 
    Console.WriteLine(value.GetValueOrDefault()); 
    } 

    static void Test(DateTime? value) 
    { 
    // 
    // This method uses the HasValue property. 
    // ... If there is no value, the number zero is written. 
    // 
    if (value.HasValue) 
    { 
     Console.WriteLine(value.Value); 
    } 
    else 
    { 
     Console.WriteLine(0); 
    } 
    } 
} 

輸出

0 
9/29/2009 9:56:21 AM 
9/30/2009 9:56:21 AM 
1/1/0001 12:00:00 AM 

最初發現Here

祝你好運!

0

您不能創建沒有任何值的DateTime(即null)。它將始終有一個默認值(DateTime.MinValue)。

一個DateTime?,在另一方面,是一種包裝的周圍DateTime,它可以讓你保持不確定。這可以是非常有用的,例如,如果您想讓用戶將其中一個日期字段留空(無選擇日期= Null)。但是請記住,您需要使用DateTime?作爲需要完成與此相關工作的任何方法的參數類型。如果您依賴其他庫,或者必須將這些數據傳遞給其他組件等,那麼您有時可能會遇到尷尬的情況。

典型的挑戰/決定:
我在組件X,其中會談到組件Ÿ,它採用DateTime使用DateTime? - 我應該重寫Ÿ處理DateTime?,還是應該我任何DateTime? -object與Null值轉化爲DateTime -object與DateTime.MinValue一個值來表示未選擇/無效的日期?也許我應該讓它拋出一個異常,在ÿ ...?

只是要注意,想想與DateTime?工作時..

0

可空的DateTime可以爲null。日期時間結構本身並沒有提供一個空的選擇。但是,‘日期時間?’可空類型允許你指定空字面的DateTime類型,它提供了另一個級別的間接

相關問題