C #: ใช้ Coalesing หรือ Ternary Operator กับ Datetime Nullable
ฉันจะใช้ Null Coalescing Operator กับ Datetime Nullable ใน C # ได้อย่างไร พยายามสร้างคำสั่งบรรทัดเดียวในแบบสอบถามแบบเลือกใน Linq การติดตามไม่ทำงาน
select new ProductRDto
{
EffectiveEndDate = timeslice.EffectiveEndDate.HasValue ?? timeslice.EffectiveEndDate.Value.Year : null
Ternary Operator สร้างข้อผิดพลาดนี้
ข้อผิดพลาด: Operator '??' ไม่สามารถใช้กับตัวถูกดำเนินการประเภท 'bool' และ 'int'
EffectiveEndDate = timeslice.EffectiveEndDate.HasValue ? timeslice.EffectiveEndDate.Value.Year : null
ข้อผิดพลาด: ไม่สามารถระบุประเภทของนิพจน์ตามเงื่อนไขได้เนื่องจากไม่มีการแปลงโดยนัยระหว่าง 'int' และ 'null'
* พยายามไม่ใช้คำสั่ง if-else
คำตอบ
สมมติว่าสิ่งที่คุณจริงต้องการเป็นปีของtimeslice.EffectiveEndDateว่าที่ไม่เป็นโมฆะหรือค่า null มิฉะนั้นตัวเลือกที่ง่ายที่สุดคือไม่ได้ที่จะใช้อย่างใดอย่างหนึ่งผู้ประกอบการที่มีเงื่อนไขหรือโมฆะหลอมรวมผู้ประกอบการ - ใช้ประกอบ null เงื่อนไขแทน:
int? year = timeslice.EffectiveEndDate?.Year;
คุณจะใช้ตัวดำเนินการการรวมกันเป็นโมฆะเพื่อใช้ค่าอื่นแทนEffectiveEndDateเช่น
DateTime? date = timeslice.EffectiveEndDate ?? defaultEndDate;
หากคุณต้องการใช้ตัวดำเนินการเงื่อนไขแทนคุณเพียงแค่ระบุว่าคุณต้องการให้nullค่าเป็นประเภทint?:
int? year = timeslice.EffectiveEndDate.HasValue
? timeslice.EffectiveEndDate.Value.Year
: (int?) null;
คุณกำลังผสมตัวดำเนินการการรวมกันแบบ null กับตัวดำเนินการที่เกี่ยวข้อง ?คุณต้องการที่จะใช้เพียงหนึ่ง
EffectiveEndDate = timeslice.EffectiveEndDate.HasValue
? timeslice.EffectiveEndDate.Value.Year : null;