static void Main(string[] args) { //#nullable disable //string? message = null; Message message = new Message { //Text = "Hello there!", Text = null !, From = null }; //#nullable enable //Console.WriteLine(message); MessagePopulator.Populate(message); Console.WriteLine(message.Text); //Console.WriteLine(message.From ?? "no from"); Console.WriteLine(message.From); Console.WriteLine(message.From !.Length); //null forgiving operator only affects compile time Console.WriteLine(message.ToUpperFrom()); //string is a reference type Console.WriteLine("Press enter to end"); Console.ReadLine(); //preventing the console app from exiting until pressing enter } }
static void Main(string[] args) { // #nullable disable // string message = null; // #nullable enable // string? message = null; Message message = new Message() { Text = "Hello there!", // Text = null!, From = null }; MessagePopulator.Populate(message); Console.WriteLine(message.Text); Console.WriteLine(message.From ?? "From is not specified."); Console.WriteLine(message.From !.Length); Console.WriteLine(message.ToUpperFrom()); Console.WriteLine("Press enter to end!"); Console.ReadLine(); }
static void Main(string[] args) { Message message = new Message { Text = "Hello there!", From = null }; MessagePopulator.Populate(message); Console.WriteLine(message.Text); Console.WriteLine(message.From); Console.WriteLine(message.From !.Length); // null-forgiving operator // only has effect on compiler. If we pass a null value, it will still throw exception at runtime // use with great care and only when absolutely necessary. May be useful for tests Console.WriteLine(message.ToUpperFrom()); Console.ReadLine(); }
static void Main(string[] args) { Message message = new Message { Text = null !, From = null }; MessagePopulator.Populate(message); Console.WriteLine(message.Text); Console.WriteLine(message.From); Console.WriteLine(message.From !.Length); Console.WriteLine(message.ToUpperFrom()); Console.WriteLine("Press enter to end"); Console.ReadLine(); } }