В чём разница между...
 
Уведомления
Очистить все

В чём разница между операторами Is и As в C#

1 Записи
1 Пользователи
0 Likes
468 Просмотры
151-150 Okolokompa Форум
(@anonim)
Trusted Member
Присоединился: 4 года назад
Записи: 25
Создатель темы  

Оператор is

В языке C# мы используем оператор «is» для проверки типа объекта. Если два объекта имеют одинаковый тип, он возвращает истину, иначе он возвращает ложь.
 
Давайте разберемся с этим в нашем коде C#. Мы объявляем два класса, Speaker (Докладчик) и Author (Автор).

  1. class Speaker {    
  2.     public string Name {    
  3.         get;    
  4.         set;    
  5.     }    
  6. }    
  7. class Author {    
  8.     public string Name {    
  9.         get;    
  10.         set;    
  11.     }    

Теперь давайте создадим объект типа Speaker:

  1. var speaker = new Speaker { Name="Platonov Semen Olegovich"};

Теперь давайте проверим, является ли объект спикером:

  1. var isTrue = speaker is Speaker;

Мы проверяем соответствующий тип. Да, наш speaker является объектом типа Speaker.

  1. Console.WriteLine("speaker is of Speaker type:{0}", isTrue);

Итак, результаты верны.

Здесь мы получаем ложь:

  1. var author = new Author { Name = "Platonov Semen Olegovich" };     
  2. var isTrue = speaker is Author;     
  3. Console.WriteLine("speaker is of Author type:{0}", isTrue);

Потому что наш speaker не является объектом типа Author.

Оператор as

Оператор «as» ведёт себя так же, как оператор «is». Разница лишь в том, что он возвращает объект, если оба совместимы с этим типом. Иначе он возвращает null (ноль).
 
Давайте разберемся с этим в нашем коде C#.
 
  1. public static string GetAuthorName(dynamic obj)     
  2.   {     
  3.      Author authorObj = obj as Author;     
  4.      return (authorObj != null) ? authorObj.Name : string.Empty;     
  5.   }   
 
У нас есть метод, который принимает динамический объект и возвращает свойство имени объекта, если объект имеет тип Author.
 
Здесь мы объявили два объекта:
 
  1. var speaker = new Speaker { Name="Platonov Semen Olegovich"};   
  2. var author = new Author { Name = "Platonov Semen Olegovich" };  
 
Следующее возвращает свойство "Name" (Имя):
 
  1. var authorName = GetAuthorName(author);     
  2. Console.WriteLine("Author name is:{0}", authorName);  
 
Возвращает пустую строку:
 
  1. authorName = GetAuthorName(speaker);     
  2. Console.WriteLine("Author name is:{0}", authorName); 
 

   
Цитата
Поделиться: