【问题标题】:Error Cannot implicitly convert type 'string' to 'System.DateTime' on return错误无法在返回时将类型“字符串”隐式转换为“System.DateTime”
【发布时间】:2015-08-28 10:10:41
【问题描述】:

我试图在一个类中添加一个适当性,但我收到错误:错误不能在 else 返回时将类型“字符串”隐式转换为“System.DateTime”。

public DateTime BookDate
        {
            get
            {
                if (this.PXP.BookDate.HasValue)
                {
                    return this.PXP.BookDate.Value;
                }
                else return "";
            }
        }

我不知道在这里返回什么。我必须返回一些东西,否则我会收到错误:并非所有代码路径都返回一个值。正在从另一个类调用 BookDate:

 public JobPXP PXP { get; set; }

我知道这个问题很简单.. 答案是我只是在 DataTime 之后错过了?。谢谢大家的回答

【问题讨论】:

  • 使其可以为空,然后在 if 中返回。
  • 那么,如果没有价值,您想要返回什么?我们无法告诉你行为应该是什么......
  • 尝试在 else 中返回 null
  • @apomene DateTime 是一个不可为空的值类型。

标签: c# asp.net datetime implicit-conversion


【解决方案1】:
public DateTime BookDate
    {
        get
        {
            if (this.PXP.BookDate.HasValue)
            {
                return this.PXP.BookDate.Value;
            }
            else return "";
        }
    }

从您的代码看来,当 this.PXP.BookDate.HasValue 为 false 时,您希望传递空日期。

错误是 for - else return "";陈述。您正在尝试在 return 语句中传递字符串。 这是我的建议(我假设 this.PXP.BookDate 从您的代码中看起来是可为空的 DateTime。)

public DateTime? BookDate
    {
        get
        {                
            return this.PXP.BookDate;                
        }
    }

【讨论】:

  • 谢谢,我只是想念 ?在数据时间之后。返回的值包括数据之后的时间。我尝试将代码更改为return this.PXP.BookDate.Value.ToShortDateString();,但它再次说我无法从字符串转换为 System.DataTime?
  • @user123456789:当您执行ToShortDateString 时,您还能期待什么? ToShortDateString 中的 string 这个词不会敲响警钟吗?
  • @Abhitalks 是的,我意识到这一点。那么如何阻止时间显示呢?
  • @Abhitalks 我真的不明白如何更改我的代码以包含 var dateAndTime = DateTime.Now; var date = dateAndTime.Date; 我尝试将其更改为 `return this.PXP.BookDate.Value.Date; ` 但时间仍在显示
【解决方案2】:

我不知道在这里返回什么

如果你不确定要返回什么,可能你想返回null。但是,问题是BookDate 属性是DateTime,它不允许nulls。但是,Nullable<DateTime> 或简单的 DateTime? 确实允许 nulls。由于this.PXP.BookDate 可以为空,所以可以直接返回,如下所示:

public DateTime? BookDate {
    get {
        return this.PXP.BookDate;
    }
}

另一种解决方案是创建一个方法,如果它存在,将获得可选的BookDate,类似于IDictionary<K,V>TryGetValue 方法:

public bool TryGetBookDate(out DateTime res) {
    res = this.PXP.BookDate ?? default(DateTime);
    return this.PXP.BookDate.HasValue;
}

【讨论】:

    【解决方案3】:

    DateTime不能为空,所以不能返回null。字符串也是无效选项。这里基本上有两个选择:

    要么返回DateTime 的特定值,例如DateTime.MinValue(即01.01.0001),要么使用Nullable<DateTime> 代替(相当于DateTime?)。

    最后一种方法可以让您返回 Null 值而不是实际日期,但会更改方法的签名,这反过来又需要在调用该方法时进行处理。

    如果你改用DateTime.MinValue,你仍然需要处理方法之外的特殊情况,所以我想说你可以选择最适合你的情况。

    【讨论】:

      【解决方案4】:

      另一种方式:

      public DateTime BookDate
              {
                  get
                  {
                     DateTime dt = DateTime.MinValue;//you default datetime here
                     DateTime.TryParse(Convert.ToString(this.PXP.BookDate.Value),out dt)
                     return dt;  
      
                  }
          }
      

      【讨论】:

        猜你喜欢
        • 2011-05-28
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多