Это не так. isне проверяет, можно ли привести объект к определенному типу. Целое число приводит к длительному штрафу, но 10 is longявляется ложным.
Мартин Смит
9
@MartinSmith: Вы смешиваете преобразование типов с приведением типов. Целое число может быть преобразовано в long, но не может быть преобразовано в long, потому что оно не длинное.
Guffa
2
Вы говорите мне, что целое число не может быть преобразовано в long? Это (long)some_integerне удастся? Я почти уверен, что мы оба знаем, что это неправда, даже не запустив его, поэтому, пожалуйста, объясните, что вы имеете в виду.
Мартин Смит
12
@MartinSmith: Вы все еще путаете кастинг с конверсией. Вы не преобразуете целое число в long, вы преобразуете целое число в long. Хотя они используют один и тот же синтаксис, ссылки приводятся и значения преобразуются.
Guffa
2
Примечание оis : « Обратите внимание, что оператор is учитывает только ссылочные преобразования, преобразования упаковки и преобразования распаковки. Другие преобразования, такие как пользовательские преобразования, не рассматриваются » (msdn.microsoft.com/en-us/library/scekt9xw .aspx). О программеas : « Обратите внимание, что оператор as выполняет только преобразования ссылок, преобразования, допускающие значение NULL, и преобразования упаковки. Оператор as не может выполнять другие преобразования, такие как пользовательские преобразования, которые вместо этого должны выполняться с использованием выражений приведения. » ( Msdn .microsoft.com / en-us / library / cscsdfbt.aspx )
user1234567,
33
Разница между IS и As в том, что ..
IS - Оператор Is используется для проверки совместимости объекта с заданным типом и возвращает результат в виде логического значения (истина или ложь).
AS - Оператор As используется для приведения объекта к заданному типу или классу.
Ex.
Student s = obj asStudent;
эквивалентно:
Student s = obj isStudent?(Student)obj :(Student)null;
Эквивалентность ясно показывает, кто из двоих более примитивен, и элегантно лежит в основе их отношений! Спасибо за равноценность!
Муса Аль-Хасси 01
1
@ MusaAl-hassy На самом деле это не показывает, что более примитивно. isможно выразить с помощью asи asможно выразить с помощью is. Вот как сделать isс asключевым словом. Bool b = obj is Student; эквивалентно: Bool b = (obj as Student) != null; Подробнее об этом здесь
Alex
8
Как isи asключевые слова используются для типа литья в C #.
Когда вы посмотрите на IL-код использования обоих ключевых слов, вы легко увидите разницу.
Код C #:
BaseClass baseclassInstance =newDerivedClass();DerivedClass derivedclassInstance;if(baseclassInstance isDerivedClass){
derivedclassInstance =(DerivedClass)baseclassInstance;// do something on derivedclassInstance}
derivedclassInstance = baseclassInstance asDerivedClass;if(derivedclassInstance !=null){// do something on derivedclassInstance}
Код IL (приведенный выше код C # находится на прикрепленном изображении):
Код IL для isиспользования ключевого слова содержит инструкции IL isinstaи castclass.
Но код IL для asиспользования ключевого слова имеет только isinsta.
В вышеупомянутом использовании произойдет два преобразования типов, если isиспользуется ключевое слово, и только одно приведение типов, если asиспользуется ключевое слово.
Примечание: если вы используете isключевое слово для проверки какого-либо условия и вас не интересует результат приведения типов, тогда будет только одно приведение типов, т.е.
if(baseclassInstance isDerivedClass){// do something based on the condition check.}
isи asключевые слова будут использоваться в зависимости от необходимости.
Ключевое слово is проверяет, является ли значение с левой стороны экземпляром типа с правой стороны. Например:
if(obj isstring){...}
Обратите внимание, что в этом случае вам придется использовать дополнительное явное приведение, чтобы получить obj как строку.
Ключевое слово as используется для приведения типов, допускающих значение NULL. Если указанное значение не является экземпляром указанного типа, возвращается null. Например:
Оператор «as» также не вызовет исключения, он просто вернет null.
Пинте Дани
Исправлена опечатка относительно «есть» и «как»
Патрик Питерс
2
Оператор Is, преобразование, возвращает истину в случае успеха. Он возвращает false, если приведение не удалось. С его помощью вы не можете захватить преобразованную переменную. Этот оператор наиболее полезен при проверке типов в операторах if и выражениях. Is-cast идеален только в том случае, если результирующая переменная не понадобится для дальнейшего использования.
Как и гипс. С его помощью мы повышаем производительность и избегаем исключений, когда приведение неверно. Если приведение невозможно, возвращается значение NULL. Для ссылочных типов рекомендуется преобразование в исходное состояние. Это и быстро, и безопасно: мы можем проверить полученную переменную на нулевое значение, а затем использовать ее. Это исключает лишние броски.
is OPERATOR
Оператор is в C # используется для проверки типа объекта и возвращает логическое значение: true, если объект имеет тот же тип, и false, если нет. или также Оператор «is» используется для проверки того, совместим ли тип времени выполнения объекта с данным типом или нет. Для нулевых объектов он возвращает false, например
if(obj isAnimalObject){//Then Work}
как ОПЕРАТОР
Оператор as выполняет ту же работу, что и оператор is, но разница в том, что вместо bool он возвращает объект, если они совместимы с этим типом, иначе он возвращает null. Другими словами, оператор as используется для выполнения преобразований между совместимыми типы.
например
Type obj =ObjectasType;
Преимущества as over is
В случае оператора is для приведения типа необходимо выполнить два шага:
Check the Type using isIf it’s true then Type cast
На самом деле это влияет на производительность, поскольку каждый раз среда CLR будет проходить иерархию наследования, проверяя каждый базовый тип на соответствие указанному типу.
Чтобы этого избежать, используйте as, он сделает это за один шаг. Только для проверки типа мы должны использовать оператор is.
Ваш ответ правильный, но ваш пример кода - антипаттерн. Это дорого , чтобы сделать isто as: это unboxes дважды. Для ссылочных типов вы должны просто сделать as, а затем проверить значение null, чтобы увидеть, сработало ли это.
Стивен Судит,
1
Посмотрите видео на YouTube ниже, в котором разница более наглядно и наглядно объясняется:
Ключевое слово «IS» полезно для проверки совместимости объектов с типом. Например, в приведенном ниже коде мы проверяем, является ли объект «ocust» типом класса «Клиент».
object ocust =newCustomer();if(ocust isCustomer){
Ключевое слово «AS» помогает выполнить преобразование из одного типа в другой. Например, в приведенном ниже коде мы преобразуем объект в строковый тип данных. Если ключевое слово «AS» не может выполнить приведение типа, оно возвращает NULL.
И IS, и AS используются для безопасного литья типов.
IS Keyword -> проверяет, совместим ли тип данного объекта с новым типом объекта. Он никогда не вызывает исключения. Это логический тип. Возвращает значение true или false.
`student stud =new student(){}if(stud is student){}// It returns true // let say boys as derived classif(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: проверяет, совместим ли тип данного объекта с новым типом объекта. Он возвращает ненулевое значение, если данный объект совместим с новым, иначе - 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`
Оба оператора используются для безопасного приведения типов.
Оператор AS:
Оператор AS также проверяет, совместим ли тип данного объекта с новым типом объекта. Это ключевое слово проверяет, совместим ли тип данного объекта с новым типом объекта. Если он несовместим с новым, он вернет NULL.
Оператор ИБ:
Этот оператор проверяет, совместим ли тип объекта с новым объектом. Если он совместим, он возвращает true, иначе false.
Ответы:
является
В
is
операторе проверяет , является ли объект может быть приведен к типу конкретного.Пример:
так как
В
as
операторе пытается привести объект к типу конкретного, и возвращает нулевое значение , если она выходит из строя.Пример:
Также связанные:
Кастинг
Оператор приведения пытается привести объект к определенному типу и в случае неудачи выдает исключение.
Пример:
источник
is
не проверяет, можно ли привести объект к определенному типу. Целое число приводит к длительному штрафу, но10 is long
является ложным.(long)some_integer
не удастся? Я почти уверен, что мы оба знаем, что это неправда, даже не запустив его, поэтому, пожалуйста, объясните, что вы имеете в виду.is
: « Обратите внимание, что оператор is учитывает только ссылочные преобразования, преобразования упаковки и преобразования распаковки. Другие преобразования, такие как пользовательские преобразования, не рассматриваются » (msdn.microsoft.com/en-us/library/scekt9xw .aspx). О программеas
: « Обратите внимание, что оператор as выполняет только преобразования ссылок, преобразования, допускающие значение NULL, и преобразования упаковки. Оператор as не может выполнять другие преобразования, такие как пользовательские преобразования, которые вместо этого должны выполняться с использованием выражений приведения. » ( Msdn .microsoft.com / en-us / library / cscsdfbt.aspx )Разница между IS и As в том, что ..
IS - Оператор Is используется для проверки совместимости объекта с заданным типом и возвращает результат в виде логического значения (истина или ложь).
AS - Оператор As используется для приведения объекта к заданному типу или классу.
Ex.
эквивалентно:
источник
is
можно выразить с помощьюas
иas
можно выразить с помощьюis
. Вот как сделатьis
сas
ключевым словом.Bool b = obj is Student;
эквивалентно:Bool b = (obj as Student) != null;
Подробнее об этом здесьКак
is
иas
ключевые слова используются для типа литья в C #.Когда вы посмотрите на IL-код использования обоих ключевых слов, вы легко увидите разницу.
Код C #:
Код IL (приведенный выше код C # находится на прикрепленном изображении):
Код IL для
is
использования ключевого слова содержит инструкции ILisinsta
иcastclass
.Но код IL для
as
использования ключевого слова имеет толькоisinsta
.В вышеупомянутом использовании произойдет два преобразования типов, если
is
используется ключевое слово, и только одно приведение типов, еслиas
используется ключевое слово.Примечание: если вы используете
is
ключевое слово для проверки какого-либо условия и вас не интересует результат приведения типов, тогда будет только одно приведение типов, т.е.is
иas
ключевые слова будут использоваться в зависимости от необходимости.источник
Ключевое слово is проверяет, является ли значение с левой стороны экземпляром типа с правой стороны. Например:
Обратите внимание, что в этом случае вам придется использовать дополнительное явное приведение, чтобы получить obj как строку.
Ключевое слово as используется для приведения типов, допускающих значение NULL. Если указанное значение не является экземпляром указанного типа, возвращается null. Например:
источник
Я бы сказал: читайте MSDN онлайн, но вот он:
Оператор is проверяет, совместим ли объект с заданным типом, и результатом оценки является логическое значение: истина или ложь.
Оператор as никогда не вызовет исключения.
источник
Оператор Is, преобразование, возвращает истину в случае успеха. Он возвращает false, если приведение не удалось. С его помощью вы не можете захватить преобразованную переменную. Этот оператор наиболее полезен при проверке типов в операторах if и выражениях. Is-cast идеален только в том случае, если результирующая переменная не понадобится для дальнейшего использования.
Как и гипс. С его помощью мы повышаем производительность и избегаем исключений, когда приведение неверно. Если приведение невозможно, возвращается значение NULL. Для ссылочных типов рекомендуется преобразование в исходное состояние. Это и быстро, и безопасно: мы можем проверить полученную переменную на нулевое значение, а затем использовать ее. Это исключает лишние броски.
источник
источник
is OPERATOR Оператор is в C # используется для проверки типа объекта и возвращает логическое значение: true, если объект имеет тот же тип, и false, если нет. или также Оператор «is» используется для проверки того, совместим ли тип времени выполнения объекта с данным типом или нет. Для нулевых объектов он возвращает false, например
как ОПЕРАТОР
Оператор as выполняет ту же работу, что и оператор is, но разница в том, что вместо bool он возвращает объект, если они совместимы с этим типом, иначе он возвращает null. Другими словами, оператор as используется для выполнения преобразований между совместимыми типы.
например
Преимущества as over is В случае оператора is для приведения типа необходимо выполнить два шага:
На самом деле это влияет на производительность, поскольку каждый раз среда CLR будет проходить иерархию наследования, проверяя каждый базовый тип на соответствие указанному типу.
Чтобы этого избежать, используйте as, он сделает это за один шаг. Только для проверки типа мы должны использовать оператор is.
источник
Оператор As похож на приведение типов, но в случае сбоя возвращает null вместо исключения.
А оператор Is используется для проверки совместимости одного объекта с определенным типом. Обычно используется в операторах If.
источник
is
: Оператор is используется для проверки совместимости типа времени выполнения объекта с заданным типом.as
: Оператор as используется для преобразования между совместимыми типами.источник
is
тоas
: это unboxes дважды. Для ссылочных типов вы должны просто сделатьas
, а затем проверить значение null, чтобы увидеть, сработало ли это.Посмотрите видео на YouTube ниже, в котором разница более наглядно и наглядно объясняется:
https://www.youtube.com/watch?v=IKmRtJcRX_I
Ниже приводится длинный ответ с объяснением кода.
Ключевое слово «IS» полезно для проверки совместимости объектов с типом. Например, в приведенном ниже коде мы проверяем, является ли объект «ocust» типом класса «Клиент».
Ключевое слово «AS» помогает выполнить преобразование из одного типа в другой. Например, в приведенном ниже коде мы преобразуем объект в строковый тип данных. Если ключевое слово «AS» не может выполнить приведение типа, оно возвращает NULL.
источник
против
Второй вернет null, если obj не является MyClass, а не вызовет исключение приведения класса.
is вернет только истину или ложь
источник
И IS, и AS используются для безопасного литья типов.
IS Keyword -> проверяет, совместим ли тип данного объекта с новым типом объекта. Он никогда не вызывает исключения. Это логический тип. Возвращает значение true или false.
Ключевое слово AS: проверяет, совместим ли тип данного объекта с новым типом объекта. Он возвращает ненулевое значение, если данный объект совместим с новым, иначе - null. Это вызывает исключение.
источник
Оба оператора используются для безопасного приведения типов.
Оператор AS:
Оператор AS также проверяет, совместим ли тип данного объекта с новым типом объекта. Это ключевое слово проверяет, совместим ли тип данного объекта с новым типом объекта. Если он несовместим с новым, он вернет NULL.
Оператор ИБ:
Этот оператор проверяет, совместим ли тип объекта с новым объектом. Если он совместим, он возвращает true, иначе false.
источник