我对 WPF 和 C#都很陌生,所以不要责怪我这可能是个愚蠢的问题。
我的WPF应用程序包含两个 datepickers 。我希望在更改时将DateTime从它们中取出,并将其用作应用程序中其他一些内容的变量。所以我对他们每个人都有这样的事情(方法是由VS自动生成的):
private void datePicker1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
date1 = datePicker1.SelectedDate;
}
但问题是,datepicker中的日期格式为 DateTime?而不是 DateTime ,我真的不知道那个问号是什么意思,为什么呢在那儿。我尝试了一些研究,但没有找到任何可以帮助我的东西。如果你看到一些更好的方式从该datepicker获取日期,你也可以帮助我。我只需要在我的xaml.cs代码中而不是在xaml中使用它并且我不是真正使用绑定因为我不确定它是否适用于我在这种情况下的需要。
感谢您的回答。
修改:我想添加一些信息,告诉我这个错误:
无法隐式转换类型'System.DateTime?'至 'System.DateTime的'。存在显式转换(你错过了吗? 投?)
答案 0 :(得分:14)
DateTime with ?
是Nullable DateTime,它可以保存空值。对于您的情况,您可以这样做:
private void datePicker1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
if(datePicker1.SelectedDate.HasValue)
date1 = datePicker1.SelectedDate.Value;
}
在C#和Visual Basic中,使用。将值类型标记为可为空 ?值类型后的表示法。例如,int?在C#或整数? 在Visual Basic中声明可以分配的整数值类型 空。
答案 1 :(得分:0)
可以为空的DateTime可以为null。
DateTime
结构本身不提供null选项。但是DateTime?
可空类型允许您将空文本分配给DateTime
类型。它在对象模型中提供了另一层间接。
使用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
祝你好运!答案 2 :(得分:0)
您无法创建没有任何值的DateTime
(即null)。它始终具有默认值(DateTime.MinValue
)。
另一方面,DateTime?
是DateTime
的一种包装,它允许您保持未定义。这可能非常有用,例如,如果您想让用户将其中一个日期字段留空(没有选择日期= Null
)。
请记住,您需要使用DateTime?
作为需要与此相关的任何方法的参数类型。如果您依赖其他库,或者必须将此数据传递给其他组件等,那么您有时可能会遇到尴尬的情况。
典型的挑战/决定:
“我在组件 X 中使用DateTime?
,它与使用DateTime
的组件 Y 对话 - 我应该重写 Y 处理DateTime?
,或者我应该将值DateTime?
的任何Null
- 对象翻译成DateTime
- 对象,其值为{{ 1}}表示未选择/无效的日期?或者我应该让它在 Y 中抛出异常......?“
使用DateTime.MinValue
时需要注意和考虑的事项。
答案 3 :(得分:0)
可以为空的DateTime可以为null。 DateTime结构本身不提供null选项。但是“DateTime?” nullable类型允许您将null文本分配给DateTime类型。它提供了另一层次的间接。