Не удается неявно преобразовать тип «System.DateTime» в «LearnScan.LearnUser.NullableDateTime» - PullRequest
0 голосов
/ 10 мая 2019

Попытка установить значение для мыльного вызова create user и при установке начальной даты для нового пользователя:

DateTime? dt = DateTime.Now;
emptyUsr.StartDate = dt;

Возвращается ошибка «Невозможно неявно преобразовать тип 'System.DateTime' в 'LearnScan.LearnUser.NullableDateTime '' У меня сложилось впечатление, что DateTime?устанавливает в nullable?

Свойство StartDate имеет тип LearnScan.LearnUser.NullableDateTime, который определяется как:

public partial class NullableDateTime : object, System.ComponentModel.INotifyPropertyChanged {
    internal static object DateTime;
    private bool isNullField;

    private System.DateTime valueField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=0)]
    public bool IsNull {
        get {
            return this.isNullField;
        }
        set {
            this.isNullField = value;
            this.RaisePropertyChanged("IsNull");
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=1)]
    public System.DateTime Value {
        get {
            return this.valueField;
        }
        set {
            this.valueField = value;
            this.RaisePropertyChanged("Value");
        }
    }

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string propertyName) {
        System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
        if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
}

* Решение - Требуются значения для каждого emptyUsr.StartDate.IsNull = false и emptyUsr.StartDate.Value= DateTime.Now;

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

Вы можете создать неявное преобразование из DateTime? в ваш NullableDateTime класс:

namespace LearnScan.LearnUser {
    public partial class NullableDateTime
    {
        public static implicit operator NullableDateTime(DateTime? dt)
        {
            if(dt.HasValue)
            {
                return new NullableDateTime { IsNull = false, Value = dt.Value };
            }
            else
            {
                 return new NullableDateTime { IsNull = true };
            }
        }
    }
}
1 голос
/ 10 мая 2019

Внешний тип NullableDateTime (определенный как , а не часть обычного набора C # библиотек и API) отличается от DateTime?. Хотя его короткое имя может заставить вас задуматься, его полное имя LearnScan.LearnUser.NullableDateTime говорит о том, что оно очень отличается от System.DateTime? (которое является действительным полным именем DateTime? в .NET). Вы должны понять, как NullableDateTime был реализован и как его использовать. Это может быть другой подход к обнуляемому типу DateTime, основанному на структуре DateTime, предложенной структурой .NET, по сравнению с коротким фрагментом, который вы указали в комментариях.

...