Разница между ключевым словом is и as

Скажите, в чем разница между is и as ключевым словом в С#

Ответ 1

является

Оператор is проверяет, можно ли применить объект к определенному типу.

Пример:

if (someObject is StringBuilder) ...

в

Оператор as пытается применить объект к определенному типу и возвращает null, если он терпит неудачу.

Пример:

StringBuilder b = someObject as StringBuilder;
if (b != null) ...

Связано также:

Кастинг

Оператор

Ответ 2

Разница между IS и As заключается в том, что..

IS - используется ли оператор для проверки совместимости объекта с данным типом и возвращает результат в виде логического (True или False).

AS - поскольку оператор используется для литья объекта для данного типа или класса.

Ex.

Student s = obj as Student;

эквивалентно:

Student s = obj is Student ? (Student)obj : (Student)null;

Ответ 3

Ключевое слово is проверяет, является ли значение на его левой стороне экземпляром типа с правой стороны. Например:

if(obj is string)
{
     ...
}

Обратите внимание, что в этом случае вам нужно будет использовать дополнительный явный приведение, чтобы получить obj как строку.

Ключевое слово as используется для передачи типов с нулевым значением. Если указанное значение не является экземпляром указанного типа, возвращается null. Например:

string str = obj as string;
if(str != null)
{
     ...
}

Ответ 4

Слова "is" и "as" используются для литья типов в С#.

Когда вы посмотрите на IL-код использования обоих ключевых слов, вы легко получите разницу.

Код С#:

BaseClass baseclassInstance= new DerivedClass();
DerivedClass derivedclassInstance;

if (baseclassInstance is DerivedClass)
{
   derivedclassInstance= (DerivedClass)baseclassInstance;
   // do something on derivedclassInstance
}


derivedclassInstance= baseclassInstance as DerivedClass;

if (derivedclassInstance!= null)
{
   // do something on derivedclassInstance
}

Код IL для вышеуказанного кода С# находится в прикрепленном изображении. Введите описание изображения здесь.

Код IL для использования ключевого слова содержит инструкции IL как isinsta, так и castclass. но код IL для использования ключевого слова имеет только isinsta.

В вышеупомянутом использовании будет выполняться двухкратное приведение типов, где используется ключевое слово, и только один раз, когда используется ключевое слово.

Примечание. Если вы используете ключевое слово 'is', чтобы проверить какое-либо условие, не интересуйтесь кастовым результатом типа, то здесь также будет только один раз, когда будет кастовать касту. т.е.

if (baseclassInstance is DerivedClass)
{
   // do something based on the condition check.
}

"is" и "as" будут использоваться ключевые слова на основе необходимости.

Ответ 5

Я бы сказал: прочитайте MSDN онлайн, но вот он:

Оператор is проверяет, совместим ли объект с данным типом, а результат оценки является логическим: true или false.

Оператор as никогда не будет генерировать исключение.

Ответ 7

Является ли оператор, литой, возвращает true, если он преуспевает. Он возвращает false, если сбой выполняется. С его помощью вы не можете захватить преобразованную переменную. Этот оператор наиболее полезен при проверке типов в if-statements и выражениях. The-cast идеально подходит, если результирующая переменная не понадобится для дальнейшего использования

Как и приведение. С его помощью мы получаем производительность и избегаем исключений, когда приведение недействительно. Null возвращается, когда бросок невозможен. Для ссылочных типов рекомендуется использовать заливку. Это быстро и безопасно. Мы можем проверить полученную переменную на значение null, а затем использовать ее. Это устраняет дополнительные нажатия

Ответ 8

  • - оператор проверяет совместимость объекта с данным введите результат, основанный на true или false.
  • как используется для перевода одного типа в другой тип и при преобразовании результат отказа null, за исключением исключения исключения. хорошо видеть ссылку для лучшего понимания с примерами https://blogs.msdn.microsoft.com/prakasht/2013/04/23/difference-between-direct-casting-is-and-as-operator-in-c/

Ответ 9

OPERATOR Оператор is в С# используется для проверки типа объекта и возвращает значение bool: true, если объект имеет тот же тип и false, если нет. или также Оператор "is" используется, чтобы проверить, совместим ли тип времени выполнения с данным типом или нет. Для нулевых объектов возвращается false, например

if(obj is AnimalObject)
{
 //Then Work
}

как ОПЕРАТОР

Оператор as выполняет ту же работу, что и оператор, но разница вместо bool возвращает объект, если он совместим с этим типом, иначе он возвращает null. В других словах оператор "as" используется для выполнения преобразований между совместимыми типы.

например

Type obj = Object as Type;

Преимущества как выше. В случае, если оператор, тип ввода, нам нужно сделать два шага:

Check the Type using is
If its true then Type cast

Фактически это влияет на производительность, так как каждый раз CLR будет проходить через иерархию наследования, проверяя каждый базовый тип на указанный тип.

Чтобы этого избежать, используйте как, он сделает это за один шаг. Только для проверки типа мы должны использовать оператор is.

Ответ 10

Оператор As похож на cast, но возвращает null вместо исключения, если он не работает.

И оператор Is используется для проверки совместимости одного объекта с определенным типом. Он обычно используется в операторах If.

Ответ 11

is: оператор is используется для проверки совместимости типа времени выполнения с данным типом

as: оператор as используется для выполнения преобразований между совместимыми типами.

object s = "this is a test";
string str=string.Empty;
if( s is string)
    str = s as string;

Ответ 12

Посмотрите нижеприведенное видео на YouTube, в котором объясняется разница в более показательном и визуальном виде: -

https://www.youtube.com/watch?v=IKmRtJcRX_I

Ниже приведен длинный ответ с описанием кода.

Ключевое слово "IS" полезно для проверки совместимости объектов с типом. Например, в приведенном ниже коде мы проверяем, является ли объект "ocust" типом класса "Клиент".

object ocust = new Customer();

if (ocust is Customer)
{ 

Ключевое слово "AS" позволяет преобразовать один тип в другой. Например, в приведенном ниже коде мы преобразуем объект в строковый тип данных. Если ключевое слово "AS" не может набирать листинг, оно возвращает NULL.

object o = "somestring";
string str = o as string;

Ответ 13

Оба оператора используются для безопасного литья типов.

Оператор AS:

Оператор AS также проверяет, совместим ли тип данного объекта с новым типом объекта. Это ключевое слово будет проверять, совместим ли тип данного объекта с новым типом объекта. Если он не совместим с новым, он вернет NULL.

Оператор ИС:

Этот оператор проверяет, совместим ли тип объекта с новым объектом. Если он совместим, он возвращает true, иначе false.

Ответ 14

MyClass myObject = (MyClass) obj;

против

MyClass myObject = obj as MyClass;

Вторая возвращает null, если obj не является MyClass, а не бросает исключение класса.

будет возвращать true или false

Ответ 15

Оба IS и AS используются для безопасного литья типов

Ключевое слово IS → проверяет, совместим ли тип данного объекта с новым типом объекта. Он никогда не выбрасывает исключение. Это булев тип... возвращает true или false

`student stud = new student(){}
if(stud is student){} // It returns true // let say boys as derived class
if(stud is boys){}// It returns false since stud is not boys type
 //this returns true when,
student stud = new boys() // this return true for both if conditions.`

AS Ключевое слово: проверяет, совместим ли тип данного объекта с новым типом объекта. Он возвращает non-null, если заданный объект совместим с новым, иначе null. Это вызывает исключение.

`student stud = new student(){}
 // let say boys as derived class
boys boy = stud as boys;//this returns null since we cant convert stud type from base class to derived class
student stud = new boys()
boys boy = stud as boys;// this returns not null since the obj is pointing to derived class`

Ответ 16

"is" предназначен для проверки равенства между типами и возвращает значение bool, а "as" - для преобразования типов и возвращает null, если преобразование является недопустимым, а не исключением