我有2个静态变量,如下面的
private static DateTime _currentPollStartDate = DateTime.MinValue; //As Default
private static DateTime _currentPollEndDate = DateTime.MinValue; //As Default
在方法中,我尝试设置值:
public void ProcessItems()
{
var Items = GetItems();
//In here, it reaches inside
if (Items.HasItems)
{
//Items[0].PollStartDate.HasValue is TRUE
//I can NOT set either Items[0].PollStartDate.Value or DateTime.MaxValue
_currentPollStartDate = Items[0].PollStartDate.HasValue ? Items[0].PollStartDate.Value : DateTime.MaxValue;
//Items[0].PollEndDate.HasValue is TRUE
//I can NOT set either Items[0].PollEndDate.Value or DateTime.MaxValue
_currentPollEndDate = Items[0].PollEndDate.HasValue ? Items[0].PollEndDate.Value : DateTime.MaxValue;
}
//...
}
但是当我使用IF
执行此操作时,我没有上述问题,为什么?
public void ProcessItems()
{
var Items = GetItems();
//In here, it reaches inside
if (Items.HasItems)
{
if (Items[0].PollStartDate.HasValue)
_currentPollStartDate = Items[0].PollStartDate.Value;
if (Items[0].PollEndDate.HasValue)
_currentPollEndDate = Items[0].PollEndDate.Value;
}
//...
}
此外,当我声明变量not static
时,这也解决了我的问题,即使我在我的第一个代码中使用它。但为什么我不能像我的第一个代码一样同时使用static
和if statement
?
编辑: 预期价值:类似的东西 _currentPollStartDate - > 2013-04-18 10:03:03
结果价值: _currentPollStartDate - > 0001-01-01 00:00:00(这不是MAX值)
答案 0 :(得分:3)
感谢Ken Kin。凭借他最新的评论,我想使用属性而不是简单的声明。所以不要这样:
private static DateTime _currentPollStartDate = DateTime.MinValue; //As Default
private static DateTime _currentPollEndDate = DateTime.MinValue; //As Default
我做了
private static DateTime CurrentPollStartDate { set; get; }
private static DateTime CurrentPollEndDate { set; get; }
并且有效。
答案 1 :(得分:1)
静态意味着“每班只有一次”。所以你的类的所有实例都会使用你定义为static的相同(通过单词的确切含义)变量。为了使您的代码可以使用:
YourClassName._currentPollStartDate = Items[0].PollStartDate.HasValue ? Items[0].PollStartDate.Value : DateTime.MaxValue;
我不知道您是否真的希望所有民意调查都有相同的开始和结束日期,这意味着最新的民意调查会更改所有旧民意调查的开始和结束日期。
答案 2 :(得分:0)
检查Items[0].PollStartDate.Value
和DateTime.MaxValue
的类型,当它们与trinary运算符一起使用时,两个分支必须是同一类型。
bool
和bool?
,或int
和int?
的类型不同。
更新:
我宣布以下内容没有问题:
class MyClassName {
private static DateTime _currentPollStartDate=DateTime.MinValue; //As Default
private static DateTime _currentPollEndDate=DateTime.MinValue; //As Default
public void ProcessItems() {
var Items=GetItems();
//In here, it reaches inside
if(Items.HasItems) {
//Items[0].PollStartDate.HasValue is TRUE
//I can NOT set either Items[0].PollStartDate.Value or DateTime.MaxValue
_currentPollStartDate=Items[0].PollStartDate.HasValue?Items[0].PollStartDate.Value:DateTime.MaxValue;
//Items[0].PollEndDate.HasValue is TRUE
//I can NOT set either Items[0].PollEndDate.Value or DateTime.MaxValue
_currentPollEndDate=Items[0].PollEndDate.HasValue?Items[0].PollEndDate.Value:DateTime.MaxValue;
}
//...
}
public void _ProcessItems() {
var Items=GetItems();
//In here, it reaches inside
if(Items.HasItems) {
if(Items[0].PollStartDate.HasValue)
_currentPollStartDate=Items[0].PollStartDate.Value;
if(Items[0].PollEndDate.HasValue)
_currentPollEndDate=Items[0].PollEndDate.Value;
}
//...
}
Items GetItems() {
return new Items();
}
}
class Items: List<Item> {
public bool HasItems {
get;
set;
}
}
class Item {
public DateTime? PollStartDate {
get;
set;
}
public DateTime? PollEndDate {
get;
set;
}
}