Уведомления
Очистить все
C# и .NET
1
Записи
1
Пользователи
0
Likes
468
Просмотры
Создатель темы 10/06/2020 2:34 пп
Оператор is
В языке C# мы используем оператор «is» для проверки типа объекта. Если два объекта имеют одинаковый тип, он возвращает истину, иначе он возвращает ложь.
Давайте разберемся с этим в нашем коде C#. Мы объявляем два класса, Speaker (Докладчик) и Author (Автор).
- class Speaker {
- public string Name {
- get;
- set;
- }
- }
- class Author {
- public string Name {
- get;
- set;
- }
- }
Теперь давайте создадим объект типа Speaker:
- var speaker = new Speaker { Name="Platonov Semen Olegovich"};
Теперь давайте проверим, является ли объект спикером:
- var isTrue = speaker is Speaker;
Мы проверяем соответствующий тип. Да, наш speaker является объектом типа Speaker.
- Console.WriteLine("speaker is of Speaker type:{0}", isTrue);
Итак, результаты верны.
Здесь мы получаем ложь:
- var author = new Author { Name = "Platonov Semen Olegovich" };
- var isTrue = speaker is Author;
- Console.WriteLine("speaker is of Author type:{0}", isTrue);
Потому что наш speaker не является объектом типа Author.
Оператор as
Оператор «as» ведёт себя так же, как оператор «is». Разница лишь в том, что он возвращает объект, если оба совместимы с этим типом. Иначе он возвращает null (ноль).
Давайте разберемся с этим в нашем коде C#.
- public static string GetAuthorName(dynamic obj)
- {
- Author authorObj = obj as Author;
- return (authorObj != null) ? authorObj.Name : string.Empty;
- }
У нас есть метод, который принимает динамический объект и возвращает свойство имени объекта, если объект имеет тип Author.
Здесь мы объявили два объекта:
- var speaker = new Speaker { Name="Platonov Semen Olegovich"};
- var author = new Author { Name = "Platonov Semen Olegovich" };
Следующее возвращает свойство "Name" (Имя):
- var authorName = GetAuthorName(author);
- Console.WriteLine("Author name is:{0}", authorName);
Возвращает пустую строку:
- authorName = GetAuthorName(speaker);
- Console.WriteLine("Author name is:{0}", authorName);