Разница между этим и как ключевое слово

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

c#
102 голоса | спросил Aman 24 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 24 Sep 2010 14:59:49 +0400 2010, 14:59:49

15 ответов


0

является

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

Пример:

if (someObject is StringBuilder) ...

в

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

Пример:

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

Также связано:

Кастинг

оператор приведения пытается привести объект к определенному типу и выбрасывает исключение в случае неудачи.

Пример:

StringBuilder b = (StringBuilder)someObject.
ответил Guffa 24 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 24 Sep 2010 15:03:46 +0400 2010, 15:03:46
0

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

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

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

Ex.

Student s = obj as Student;

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

Student s = obj is Student ? (Student)obj : (Student)null;
ответил Prem Ranjan Jha 15 +04002013-10-15T23:23:55+04:00312013bEurope/MoscowTue, 15 Oct 2013 23:23:55 +0400 2013, 23:23:55
0

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

if(obj is string)
{
     ...
}

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

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

string str = obj as string;
if(str != null)
{
     ...
}
ответил ShdNx 24 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 24 Sep 2010 15:04:15 +0400 2010, 15:04:15
0

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

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

Код C #:

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-код для вышеупомянутого кода C # находится в прикрепленном изображении   введите описание изображения здесь

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

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

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

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

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

ответил Abhilash NK 7 12016vEurope/Moscow11bEurope/MoscowMon, 07 Nov 2016 20:55:53 +0300 2016, 20:55:53
0
  1. is оператор проверяет, совместим ли объект с данным введите результат, основанный на true или false.
  2. as используется для приведения одного типа к другому типу и при преобразовании результат ошибки нулевой, за исключением того, что вызывает исключение. для лучшего понимания см. ссылку на примеры https://blogs.msdn.microsoft.com/prakasht/2013/04/23/difference-between-direct-casting-is-and-as-operator-in-c/
ответил azhar abbasi 6 PMpWed, 06 Apr 2016 22:11:20 +030011Wednesday 2016, 22:11:20
0

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

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

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

ответил Patrick Peters 24 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 24 Sep 2010 15:02:35 +0400 2010, 15:02:35
0

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

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

ответил Harry 24 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 24 Sep 2010 15:04:03 +0400 2010, 15:04:03
0

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

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

object s = "this is a test";
string str=string.Empty;
if( s is string)
    str = s as string;
ответил KMån 24 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 24 Sep 2010 15:05:39 +0400 2010, 15:05:39
0

Посмотрите видео на 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;
ответил Shivprasad Koirala 26 FebruaryEurope/MoscowbWed, 26 Feb 2014 04:45:00 +0400000000amWed, 26 Feb 2014 04:45:00 +040014 2014, 04:45:00
0

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

Оператор AS:

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

Оператор IS:

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

ответил Tukaram 9 Jpm1000000pmFri, 09 Jan 2015 17:12:18 +030015 2015, 17:12:18
0

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

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

ответил Pankaj Ikhar 4 +03002015-10-04T02:46:34+03:00312015bEurope/MoscowSun, 04 Oct 2015 02:46:34 +0300 2015, 02:46:34
0
MyClass myObject = (MyClass) obj;

против

MyClass myObject = obj as MyClass;

Второй вернет ноль, если obj не является MyClass, а не сгенерирует исключение приведения класса.

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

ответил vzades 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 22 Sep 2016 18:22:32 +0300 2016, 18:22:32
0

И 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 ключевое слово: проверяет, совместим ли тип данного объекта с новым типом объекта. Возвращает ненулевое значение, если данный объект совместим с новым, в противном случае - нулевое. Это вызывает исключение.

`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`
ответил Sandeep Reddy 7 12016vEurope/Moscow11bEurope/MoscowMon, 07 Nov 2016 22:11:43 +0300 2016, 22:11:43
0

- ОПЕРАТОР Оператор is в C # используется для проверки типа объекта и возвращает значение bool: true, если объект того же типа, и false, если нет. или также оператор «is» используется для проверки, совместим ли тип времени выполнения объекта с данным типом или нет. Для нулевых объектов возвращает false например

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

в качестве ОПЕРАТОРА

Оператор as выполняет ту же работу, что и оператор is, но отличие заключается не в bool, он возвращает объект, если они совместимы с этим типом, в противном случае он возвращает null. Другими словами, оператор «as» используется для выполнения преобразования между совместимыми типами.

например

Type obj = Object as Type;

Преимущества более чем В случае использования оператора is, для ввода cast нам нужно сделать два шага:

Check the Type using is
If it’s true then Type cast

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

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

ответил Faizan Butt 31 AM00000090000004031 2018, 09:51:40
0

«is» предназначен для проверки равенства между типами и возвращает значение bool, а «as» для преобразования типов и возвращает ноль, если преобразование недопустимо вместо исключения

ответил ononeze 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 26 Sep 2016 17:42:52 +0300 2016, 17:42:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132