我最近看到了以下代码:
public class Person
{
//line 1
public string FirstName { get; }
//line 2
public string LastName { get; } = null!;
//assign null is possible
public string? MiddleName {get; } = null;
public Person(string firstName, string lastName, string middleName)
{
FirstName = firstName;
LastName = lastName;
MiddleName = middleName;
}
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
MiddleName = null;
}
}
Run Code Online (Sandbox Code Playgroud)
基本上我试着深入研究新的c#8功能.其中之一是NullableReferenceTypes.实际上已经有很多关于它的文章和信息.例如,这篇文章非常好.但是我找不到关于这个新陈述的任何信息null!
有人可以向我提供解释吗?为什么我需要使用它?又什么区别line1和line2?
最后一天,我在GitHub上探索.NET源代码,偶然发现了以下结构:((SomeTypeToCast)variable!).SomeMethodToCall()。
请注意后缀!原来在这里列出
那么,一个简单的问题:这是什么?
PS:就我个人而言,我对这件事可能意味着几个猜测:有点“此值永远不会为空”。但是,在C#中没有这样的运算符(至少是公开可用的),并且当我自己在测试项目中尝试使用该表达式时,此类表达式无法编译。
这些运算符有什么区别?
var c = foo?.Prop1;
Run Code Online (Sandbox Code Playgroud)
var c = foo!.Prop1;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,Prop1是一个int.