Pourquoi ne puis-je pas appeler une méthode DateTime sur un objet DateTime dans une autre classe en C#

StackOverflow https://stackoverflow.com//questions/20052499

  •  26-12-2019
  •  | 
  •  

Question

J'ai trouvé quelques exemples de ce problème dans d'autres langages tels que Ruby ou PHP et ils semblent indiquer que j'aurais besoin d'une sorte d'inclusion pour prendre en charge cela, mais je n'arrive pas à le comprendre exactement.

J'ai:

private void setLoansView(Member _member)
{

    foreach (Loan loan in _member.Loans)
        {
            this.dt.Rows.Add(_member.Name, // dt is a datatable 
                   loan.BookOnLoan.CopyOf.Title, 
                   loan.TimeOfLoan.ToShortDateString(), 
                   loan.DueDate.ToShortDateString(), 
                   loan.TimeReturned.ToShortDateString());
        }

Le prêt ressemble à ceci :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;

namespace Library.Entities
{
    public class Loan
    {
        [Key]
        public int LoanId { get; set; }
        [Required]
        public DateTime? TimeOfLoan { get; set; }
        public DateTime? DueDate { get; set; }
        public DateTime? TimeReturned { get; set; }
        [Required]
        public Copy BookOnLoan { get; set; }
        [Required]
        public Member Loanee { get; set; }
    }
}

Sur tous mes objets DateTime dans le setLoansView() La méthode que j'obtiens 'ne contient pas de définition pour "ToShortString()".La classe Member a un ICollection<Loan> et c'est de là que je récupère les prêts.Je n'arrive pas à comprendre pourquoi je perds l'accès aux méthodes de DateTime lorsque j'y accède depuis le ICollection cependant.

Était-ce utile?

La solution

C'est parce que le type de ces propriétés n'est pas DateTime, mais Nullable<DateTime>. Nullable<T> n'expose pas une telle méthode.

Si vous êtes sûr que ces dates volonté avoir une valeur, s'interposer .Value avant .ToShortDateString().Dans le cas contraire, vous devez décider de ce qui doit se passer dans ce cas.

Autres conseils

Tu as nullable DateTime objets.Vous devrez appeler .Value pour obtenir la valeur (s'il y en a une)

loan.TimeOfLoan.Value.ToShortDateString()

C'est nullable, utilisez .Value pour obtenir ces propriétés (vérifiez d'abord si null)

Parce que vos champs sont définis comme nullables DateTime?

Utilisez simplement .Value pour accéder à la valeur du champ et vous devez disposer de vos méthodes de format DateTime normales.

Vous devriez également vérifier null en appelant .HasValue

vous avez un DateTime nullable (DateTime ?), seule la classe DateTime a la méthode "ToShortDateString()"...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top