3

我对WPFC#很陌生,所以不要怪我问这个可能很愚蠢的问题。

我的 WPF 应用程序带有两个datepickers。我想在 DateTime 更改时从中取出 DateTime,并将其用作应用程序中其他一些东西的变量。所以我对他们每个人都有这样的东西(方法是由VS自动生成的):

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

但问题是 datepicker 中的日期是格式DateTime?不是DateTime,我真的不知道那里的问号是什么意思以及为什么会在那里。我尝试了一些研究,但没有找到任何对我有帮助的东西。如果您看到从该日期选择器获取日期的更好方法,您也可以帮助我。我只需要在我的 xaml.cs 代码中而不是在 xaml 中使用它,而且我并不真正喜欢使用绑定,因为我不确定它在这种情况下是否按我的需要工作。

感谢您的任何回答。

编辑:我想添加它向我显示此错误的信息:

无法隐式转换类型“System.DateTime?” 到“系统。日期时间”。存在显式转换(您是否缺少演员表?)

4

4 回答 4

14

DateTime with ?is Nullable DateTime,它可以保存空值。对于您的情况,您可以这样做:

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

Nullable<T>C#

在 C# 和 Visual Basic 中,您可以使用 ? 将值类型标记为可为空的。值类型后的符号。例如,int? 用 C# 还是整数?在 Visual Basic 中声明了一个可以分配为 null 的整数值类型。

于 2013-05-06T10:56:43.860 回答
0

可为空的 DateTime 可以为空。

DateTime结构本身不提供 null 选项。但是DateTime?可空类型允许您将空文字分配给该DateTime类型。它在对象模型中提供了另一个层次的间接性。

使用空 DateTime 结构的程序: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

最初在这里找到

祝你好运!

于 2013-05-06T11:00:22.447 回答
0

您不能创建DateTime没有任何值(即 null)的 a。它将始终具有默认值 ( DateTime.MinValue)。

DateTime?另一方面,A是一种围绕 的包装器DateTime,它允许您将其保留为undefined。这可能非常有用,例如,如果您想让用户将日期字段之一留空(未选择日期 = Null)。

请记住,您需要使用DateTime?任何需要执行与此相关的工作的方法的参数类型。如果您依赖其他库,或者必须将此数据传递给其他组件等,那么您有时可能会遇到尴尬的情况。

典型的挑战/决定:
DateTime?在组件X中使用,它与组件 Y 对话,组件Y使用DateTime- 我应该重写Y来处理DateTime?,还是应该将任何DateTime?值为的-objectNull转换DateTime为值为DateTime.MinValueto的 -object代表未选择/无效的日期?或者我应该让它在Y ... 中抛出异常?

DateTime?只是在使用..时需要注意和思考的事情

于 2013-05-06T11:15:21.940 回答
0

可为空的 DateTime 可以为空。DateTime 结构本身不提供 null 选项。但是“日期时间?” 可空类型允许您将空文字分配给 DateTime 类型。它提供了另一个级别的间接性。

于 2015-01-22T06:45:04.527 回答