所以我从Google日历活动中获取了活动数据。我有一个类item
的变量Google.Apis.Calendar.v3.Data.Event
。有一个名为Start
的属性,即偶数开始时。如果在一天的特定时间设置,则Start.DateTime
将具有值。如果它是一个全天事件,则Start.DateTime
将为空,并且它将具有单独的属性Start.Date
,由于某种原因这是一个字符串。如果Start.DateTime
没有值,我希望Start.Date
值为{1}}。这是相关代码:
if (item.Start.DateTime.HasValue)
{
newEvent.Start = (DateTime)item.Start.DateTime;
newEvent.End = (DateTime)item.End.DateTime;
} else
{
string StartDay = item.Start.Date;
string EndDay = item.End.Date;
}
因此,当我在具有常规DateTime的日期运行它时,我看到了:
它为NewEvent.Start分配一个值。大。
现在我使用Start.DateTime为null的全天事件运行它:
所以它应该跳到else语句,但它没有:
即使条件为false,newEvent.Start仍会被赋值。并且else语句没有被执行。发生了什么事?
答案 0 :(得分:4)
因为var email = 'Lorem ipsum <a href="http://www.example.com/09D623" target="blank" style="color: #66BB12;">dolor sit</a> amet, 09D623 non pulvinar nunc egestas. Nunc sit amet imperdiet 09D623 magnat.';
var modded = email.replace(/(\s\d+[A-Z]+\d+\s)/g, "<strong>$1</strong>");
document.write(modded);
是值类型,所以它不能具有非值。因此,您在调试器中看到的只是它的默认值,但是不执行if语句。只有调试器显示变量的任何,因为它无法显示DateTime
。显然,您的会员null
是Start
,而DateTime
则返回item.Start
。
当你在DateTime?
中的语句中放入一个断点时,你会发现它永远不会被执行。只有调试器正在创建此值,没有任何内容分配给您的变量 - 除了它的默认值,显然是定义变量时的1月1日。因此,无论您定义if
,这都是设置此默认值的行 - 而不是newEvent
- 语句。
答案 1 :(得分:1)
按预期跳过代码。但是newEvent.Start
无论如何都有一个值,可能是因为它是DateTime类型,不能为null。
答案 2 :(得分:1)
这是DataTime类型的默认值。您可以将Nullable DataTime用于您的目的。
DateTime? d = null;
bool boolNotSet = d.HasValue;
答案 3 :(得分:0)
DateTime是C#中的结构;这样做的一个结果是它的成员变量总是被初始化,在这种情况下是值1/1/0001 12:00:00 AM,它也等于DateTime.MinValue
或default(DateTime)
。另一个结果是结构按值传递,不能为空。
如果你想拥有一个DateTime&#34; null&#34;州,您可能想在事件类中使用Nullable<T>
(或简写?):
public class NewEvent {
public DateTime? Start { get; set; }
public DateTime? End { get; set; }
}
Nullable<T>
为您提供HasValue
属性,以检查对象是否已分配值。