ฉันต้องการทดสอบคุณลักษณะการอ้างอิงชนิด nullableใหม่ใน C # 8.0
ฉันเริ่มโครงการใหม่ที่กำหนดเป้าหมายเป็น. NET Core 3.0 เปิดใช้งานประเภทการอ้างอิง nullable ใน.csproj
ไฟล์และเริ่มการเข้ารหัส ฉันสร้างรายการที่เรียบง่ายที่จะใช้เวลาstring[]
และการส่งกลับในอาร์เรย์ที่เท่าเทียมกันstring
abc
ตอนนี้เนื่องจากฉันไม่แน่ใจว่าabc
มีอยู่จริงในอาร์เรย์ฉันใช้FirstOrDefault()
ซึ่งควรเริ่มต้นnull
หากไม่พบการจับคู่
using System;
using System.Linq;
public string FindArgument(string[] args)
{
var arg = args.FirstOrDefault(x => x == "abc");
return arg;
}
วิธีการส่งกลับของฉันstring
ซึ่งควรในขณะนี้เป็นที่ไม่ใช่ nullableประเภท เนื่องจากFirstOrDefault()
อาจส่งคืนnull
ฉันคาดหวังว่าวิธีการข้างต้นให้คำเตือนเมื่อส่งกลับตัวแปรอาจเป็นโมฆะ arg
มันไม่ใช่.
เมื่อมองที่ลายเซ็นต์สำหรับFirstOrDefault()
ใน Visual Studio จะเห็นได้ชัดว่าทำไม : วิธีการส่งกลับค่าstring
ไม่ใช่สิ่งที่เทียบเท่าได้ซึ่งstring?
ฉันคาดหวัง
การใช้วิธีการต่อไปนี้จะให้คำเตือนที่ฉันคาดไว้
var arg = args.Contains("abc") ? "abc" : null;
return arg;
ไลบรารีระบบ (ในตัวอย่างนี้System.Linq
) ไม่เปิดเผยข้อมูลความสามารถในการ null เมื่อกำหนดเป้าหมาย. NET Core 3.0 หรือไม่