พิจารณารหัสต่อไปนี้:
#nullable enable
class Foo
{
public string? Name { get; set; }
public bool HasName => Name != null;
public void NameToUpperCase()
{
if (HasName)
{
Name = Name.ToUpper();
}
}
}
ในการชื่อ = ชื่อ. ToUpper () ฉันได้รับคำเตือนว่าชื่อเป็นการอ้างอิงโมฆะที่เป็นไปได้ซึ่งไม่ถูกต้องชัดเจน ฉันสามารถแก้ไขคำเตือนนี้ได้โดยการใช้ HasName ดังนั้นเงื่อนไขก็คือ (Name! = null)
มีวิธีใดบ้างที่ฉันสามารถสั่งให้คอมไพเลอร์ได้ว่าการตอบสนองที่แท้จริงจาก HasName แสดงถึงข้อ จำกัด ที่ไม่สามารถลบล้างได้ในชื่อ?
นี่เป็นสิ่งสำคัญเนื่องจาก HasName อาจทดสอบสิ่งต่าง ๆ มากมายและฉันอาจต้องการใช้ในหลาย ๆ ที่หรืออาจเป็นส่วนสาธารณะของพื้นผิว API มีหลายเหตุผลที่ต้องการให้แฟคเตอร์ตรวจสอบโมฆะเป็นวิธีของตัวเอง แต่การทำเช่นนั้นดูเหมือนว่าจะทำลายตัวตรวจสอบการอ้างอิงที่เป็นโมฆะ
#nullable disable
แล้ว#nullable enable
หรือrestore
อีกครั้งหลังจากนั้น ( docs.microsoft.com/en-us/dotnet/csharp/... )
!
โอเปอเรเตอร์"dammit" if(HasName) { Name = Name!.ToUpper(); }
HasValue
กับประเภทที่ไม่สามารถใช้งานnull
ได้ อาจไม่ส่งผลกระทบต่อปัญหาของคุณ