Заставка

Программирование на старых и современных языках, а так-же дизайн

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Проверка на null

Сообщений 1 страница 3 из 3

1

Из Си, PHP, и пр. ЯП мы знаем короткую запись типа результат = условие ? значение1 : значение2, так-же знаем if(переменная), или if(переменная != null), но вот появилось что-то такое:
var результат = объект?.переменная, это как я понял эквивалент if(объект.переменная) или if(объект.переменная != null). Про это я слышал в ЯП Swift, в который мы будем уже скоро играться! Вот простой пример:

Код:
using System;

public class Student {
	public String Firstanme { get; set; }
	public String Lastanme { get; set; }
}

public class Program
{
	public static void Main()
	{
           Student s = new Student();
           var name = $"{s?.Firstanme} {s?.Lastanme}";
           Console.WriteLine($"Привет {name}!");
	}
}

Результат:

Код:
Привет  !

Теперь изменим код:

Код:
Student s = new Student() { Firstanme = "lexx821" };

Результат:

Код:
Привет lexx821 !

Теперь ещё изменим:

Код:
Student s = new Student() { Firstanme = "Антон", Lastanme = "Попов" };

Результат:

Код:
Привет Антон Попов!

0

2

Не я немного неправильно понял и неправильно объяснил, за это пардон, ошибка будет, если будет Student s = null:
Если написать так:

Код:
using System;

public class Student {
	public String Firstanme { get; set; }
	public String Lastanme { get; set; }
}

public class Program
{
	public static void Main()
	{
           Student s = null;
           var name = $"{s.Firstanme} {s.Lastanme}";
           Console.WriteLine($"Привет {name}!");
	}
}

То произойдёт ошибка:

Код:
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
   at Program.Main()
Command terminated by signal 6

А если написать так:

Код:
using System;

public class Student {
	public String Firstanme { get; set; }
	public String Lastanme { get; set; }
}

public class Program
{
	public static void Main()
	{
           Student s = null;
           var name = $"{s?.Firstanme} {s?.Lastanme}";
           Console.WriteLine($"Привет {name}!");
	}
}

То результат будет таким:

Код:
Привет  !

0

3

По старинке короткой записи результат = условие ? значение1 : значение2 или в блоки try-catch, было бы так:
По старинке:

Код:
Student s = null;
var res = (s  == null ? null : s.Firstanme + " " + s.Lastanme);
Console.WriteLine("Привет " + res + "!");

Результат:

Код:
Привет !

Спомощью try-catch блока:

Код:
using System;

public class Student {
	public String Firstanme { get; set; }
	public String Lastanme { get; set; }
}

public class Program
{
	public static void Main()
	{
    String res = "";
                Student s = null;
    try 
    {
    	res = s.Firstanme + " " + s.Lastanme;
    }
    catch(Exception ex) {
    	Console.WriteLine(ex.Message);
    }
    
    Console.WriteLine("Привет " + res + "!");
	}
}

Результат:

Код:
Object reference not set to an instance of an object.
Привет !

0