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做了什么?错误是什么?运行时还是编译时?你说有错误,但实际上你没有说什么