Расскажите , пожалуйста , в чем разница между is
и as
ключевым словом в C #
Расскажите , пожалуйста , в чем разница между is
и as
ключевым словом в C #
Ответы:
В is
операторе проверяет , является ли объект может быть приведен к типу конкретного.
Пример:
if (someObject is StringBuilder) ...
В as
операторе пытается привести объект к типу конкретного, и возвращает нулевое значение , если она выходит из строя.
Пример:
StringBuilder b = someObject as StringBuilder;
if (b != null) ...
Также связанные:
Оператор приведения пытается привести объект к определенному типу и в случае неудачи выдает исключение.
Пример:
StringBuilder b = (StringBuilder)someObject.
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.
Student s = obj as Student;
эквивалентно:
Student s = obj is Student ? (Student)obj : (Student)null;
Как 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
и castclass
.
Но код IL для as
использования ключевого слова имеет только isinsta
.
В вышеупомянутом использовании произойдет два преобразования типов, если is
используется ключевое слово, и только одно приведение типов, если as
используется ключевое слово.
Примечание: если вы используете is
ключевое слово для проверки какого-либо условия и вас не интересует результат приведения типов, тогда будет только одно приведение типов, т.е.
if (baseclassInstance is DerivedClass)
{
// do something based on the condition check.
}
is
и as
ключевые слова будут использоваться в зависимости от необходимости.
Ключевое слово is проверяет, является ли значение с левой стороны экземпляром типа с правой стороны. Например:
if(obj is string)
{
...
}
Обратите внимание, что в этом случае вам придется использовать дополнительное явное приведение, чтобы получить obj как строку.
Ключевое слово as используется для приведения типов, допускающих значение NULL. Если указанное значение не является экземпляром указанного типа, возвращается null. Например:
string str = obj as string;
if(str != null)
{
...
}
Я бы сказал: читайте MSDN онлайн, но вот он:
Оператор is проверяет, совместим ли объект с заданным типом, и результатом оценки является логическое значение: истина или ложь.
Оператор as никогда не вызовет исключения.
Оператор Is, преобразование, возвращает истину в случае успеха. Он возвращает false, если приведение не удалось. С его помощью вы не можете захватить преобразованную переменную. Этот оператор наиболее полезен при проверке типов в операторах if и выражениях. Is-cast идеален только в том случае, если результирующая переменная не понадобится для дальнейшего использования.
Как и гипс. С его помощью мы повышаем производительность и избегаем исключений, когда приведение неверно. Если приведение невозможно, возвращается значение NULL. Для ссылочных типов рекомендуется преобразование в исходное состояние. Это и быстро, и безопасно: мы можем проверить полученную переменную на нулевое значение, а затем использовать ее. Это исключает лишние броски.
is OPERATOR Оператор is в C # используется для проверки типа объекта и возвращает логическое значение: true, если объект имеет тот же тип, и false, если нет. или также Оператор «is» используется для проверки того, совместим ли тип времени выполнения объекта с данным типом или нет. Для нулевых объектов он возвращает false, например
if(obj is AnimalObject)
{
//Then Work
}
как ОПЕРАТОР
Оператор as выполняет ту же работу, что и оператор is, но разница в том, что вместо bool он возвращает объект, если они совместимы с этим типом, иначе он возвращает null. Другими словами, оператор as используется для выполнения преобразований между совместимыми типы.
например
Type obj = Object as Type;
Преимущества as over is В случае оператора is для приведения типа необходимо выполнить два шага:
Check the Type using is
If it’s true then Type cast
На самом деле это влияет на производительность, поскольку каждый раз среда CLR будет проходить иерархию наследования, проверяя каждый базовый тип на соответствие указанному типу.
Чтобы этого избежать, используйте as, он сделает это за один шаг. Только для проверки типа мы должны использовать оператор is.
is
: Оператор is используется для проверки совместимости типа времени выполнения объекта с заданным типом.
as
: Оператор as используется для преобразования между совместимыми типами.
object s = "this is a test";
string str=string.Empty;
if( s is string)
str = s as string;
is
то as
: это unboxes дважды. Для ссылочных типов вы должны просто сделать as
, а затем проверить значение null, чтобы увидеть, сработало ли это.
Посмотрите видео на 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;
IS Keyword -> проверяет, совместим ли тип данного объекта с новым типом объекта. Он никогда не вызывает исключения. Это логический тип. Возвращает значение 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: проверяет, совместим ли тип данного объекта с новым типом объекта. Он возвращает ненулевое значение, если данный объект совместим с новым, иначе - 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.