C# 为什么我不能在IF条件中设置任何值?

C# 为什么我不能在IF条件中设置任何值?,c#,if-statement,default-value,C#,If Statement,Default Value,我有两个静态变量,如下所示 private static DateTime _currentPollStartDate = DateTime.MinValue; //As Default private static DateTime _currentPollEndDate = DateTime.MinValue; //As Default 在方法中,我尝试设置值: public void ProcessItems() { var Items = GetItems(); //

我有两个静态变量,如下所示

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;
    }

    //...
}
另外,当我声明变量
不是静态的
时,这也解决了我的问题,尽管我像在我的第一个代码中一样使用它。但是为什么不能像在第一个代码中一样使用
静态
if语句

编辑: 期望值:类似于 _currentPollStartDate->2013-04-18 10:03:03

结果值:
_currentPollStartDate->0001-01-01 00:00:00(这甚至不是最大值)

检查
项[0]的类型。PollStartDate.value
DateTime.MaxValue
,当它们与三元运算符一起使用时,两个分支必须是相同的类型

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;
    }
}
类MyClassName{
私有静态日期时间_currentPollStartDate=DateTime.MinValue;//默认值
私有静态日期时间_currentPollEndDate=DateTime.MinValue;//默认值
公共项目(){
var Items=GetItems();
//在这里,它延伸到里面
if(Items.HasItems){
//项[0]。PollStartDate.HasValue为TRUE
//无法设置项[0].PollStartDate.Value或DateTime.MaxValue
_currentPollStartDate=Items[0]。PollStartDate.HasValue?Items[0]。PollStartDate.Value:DateTime.MaxValue;
//项[0]。PollEndDate.HasValue为TRUE
//无法设置项[0]。PollEndDate.Value或DateTime.MaxValue
_currentPollEndDate=Items[0]。PollEndDate.HasValue?Items[0]。PollEndDate.Value:DateTime.MaxValue;
}
//...
}
public void_ProcessItems(){
var Items=GetItems();
//在这里,它延伸到里面
if(Items.HasItems){
if(项[0].PollStartDate.HasValue)
_currentPollStartDate=项[0]。PollStartDate.Value;
if(项[0].PollEndDate.HasValue)
_currentPollEndDate=项[0]。PollEndDate.Value;
}
//...
}
Items GetItems(){
返回新项目();
}
}
类别项目:列表{
公共物品{
得到;
设置
}
}
类项目{
公共日期时间?PollStartDate{
得到;
设置
}
公共日期时间?PollEndDate{
得到;
设置
}
}

检查
项[0]的类型。PollStartDate.Value
DateTime.MaxValue
,当它们与三元运算符一起使用时,两个分支必须是相同的类型

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;
    }
}
类MyClassName{
私有静态日期时间_currentPollStartDate=DateTime.MinValue;//默认值
私有静态日期时间_currentPollEndDate=DateTime.MinValue;//默认值
公共项目(){
var Items=GetItems();
//在这里,它延伸到里面
if(Items.HasItems){
//项[0]。PollStartDate.HasValue为TRUE
//无法设置项[0].PollStartDate.Value或DateTime.MaxValue
_currentPollStartDate=Items[0]。PollStartDate.HasValue?Items[0]。PollStartDate.Value:DateTime.MaxValue;
//项[0]。PollEndDate.HasValue为TRUE
//无法设置项[0]。PollEndDate.Value或DateTime.MaxValue
_currentPollEndDate=Items[0]。PollEndDate.HasValue?Items[0]。PollEndDate.Value:DateTime.MaxValue;
}
//...
}
public void_ProcessItems(){
var Items=GetItems();
//在这里,它延伸到里面
if(Items.HasItems){
if(项[0].PollStartDate.HasValue)
_currentPollStartDate=项[0]。PollStartDate.Value;
if(项[0].PollEndDate.HasValue)
_currentPollEndDate=项[0]。PollEndDate.Value;
}
//...
}
Items GetItems(){
返回新项目();
}
}
类别项目:列表{
公共物品{
得到;
设置
}
}
类项目{
公共日期时间?PollStartDate{
得到;
设置
}
公共日期时间?PollEndDate{
得到;
设置
}
}
静态表示“每个类仅一次”。因此,您的类的所有实例都将使用您定义为static的相同变量(根据单词的确切含义)。要使代码正常工作,请使用:

YourClassName._currentPollStartDate = Items[0].PollStartDate.HasValue ? Items[0].PollStartDate.Value : DateTime.MaxValue;
我不知道您是否真的希望所有投票的开始日期和结束日期都相同,这意味着最新的投票会更改所有旧投票的开始日期和结束日期。

静态意味着“每堂课仅一次”。因此,您的类的所有实例都将使用您定义为static的相同变量(根据单词的确切含义)。要使代码正常工作,请使用:

YourClassName._currentPollStartDate = Items[0].PollStartDate.HasValue ? Items[0].PollStartDate.Value : DateTime.MaxValue;

我不知道您是否真的希望所有投票的开始和结束日期都相同,这意味着最新的投票会更改所有旧投票的开始和结束日期。

感谢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; } 

它成功了。

感谢肯·金。在他的最新评论中,我想使用属性而不是简单的声明。因此,以下不是这个:

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; } 

它起作用了。

PollStartDate的作用是什么?错误是什么?运行时还是编译时?你说有错误,但实际上你没有说错误是什么。我建议你重新表述你的问题,清楚地说明在这两种情况下的输出是什么,以及预期的输出是什么。PollStartDate做了什么?错误是什么?运行时还是编译时?你说有错误,但实际上你没有说什么