C #: Datetime Nullable ile Coalesing veya Ternary Operator kullanın

Sep 11 2020

C # 'da Datetime Nullable ile Null Coalescing Operatörünü nasıl kullanabilirim? Linq sorgusunda bir seçimde tek satırlı ifade oluşturmaya çalışıyor. İzleme çalışmıyor

select new ProductRDto
{
    EffectiveEndDate = timeslice.EffectiveEndDate.HasValue ?? timeslice.EffectiveEndDate.Value.Year : null 

Üçlü Operatör bu hatayı oluşturur

Hata: Operatör '??' 'bool' ve 'int' türündeki işlenenlere uygulanamaz

  EffectiveEndDate = timeslice.EffectiveEndDate.HasValue ? timeslice.EffectiveEndDate.Value.Year : null

Hata: 'int' ve 'null' arasında örtük bir dönüşüm olmadığından koşullu ifade türü belirlenemiyor

* if-else ifadelerini kullanmamaya çalışmak

Yanıtlar

5 JonSkeet Sep 11 2020 at 03:24

Gerçekte ne istediğinizi varsayarsak , yıl timeslice.EffectiveEndDateboş değilse veya boş değer ise, en basit seçenek koşullu işleci veya boş birleştirme işlecini kullanmak değildir - bunun yerine boş koşullu işleci kullanın:

int? year = timeslice.EffectiveEndDate?.Year;

Bunun yerine farklı bir değer kullanmak için boş birleştirme operatörünü kullanırsınız EffectiveEndDate, ör.

DateTime? date = timeslice.EffectiveEndDate ?? defaultEndDate;

Bunun yerine koşullu operatörü kullanmak istiyorsanız, nulldeğerin şu türde olmasını istediğinizi belirtmeniz yeterlidir int?:

int? year = timeslice.EffectiveEndDate.HasValue
    ? timeslice.EffectiveEndDate.Value.Year
    : (int?) null;
1 rory.ap Sep 11 2020 at 03:23

Sıfır birleştirme operatörünü üçlü operatörle karıştırıyorsunuz. Sadece bir tane kullanmak istiyorsunuz ?.

EffectiveEndDate = timeslice.EffectiveEndDate.HasValue
    ? timeslice.EffectiveEndDate.Value.Year : null;