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

时间:2013-04-18 08:35:29

标签: c# if-statement default-value

我有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时,这也解决了我的问题,即使我在我的第一个代码中使用它。但为什么我不能像我的第一个代码一样同时使用staticif statement

编辑: 预期价值:类似的东西 _currentPollStartDate - > 2013-04-18 10:03:03

结果价值:  _currentPollStartDate - > 0001-01-01 00:00:00(这不是MAX值)

3 个答案:

答案 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.ValueDateTime.MaxValue的类型,当它们与trinary运算符一起使用时,两个分支必须是同一类型。

boolbool?,或intint?的类型不同。


更新:

我宣布以下内容没有问题:

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