Diga qual é a diferença entre is
e as
palavra - chave em C #
Diga qual é a diferença entre is
e as
palavra - chave em C #
Respostas:
O is
operador verifica se um objeto pode ser convertido para um tipo específico.
Exemplo:
if (someObject is StringBuilder) ...
O as
operador tenta converter um objeto em um tipo específico e retorna nulo se falhar.
Exemplo:
StringBuilder b = someObject as StringBuilder;
if (b != null) ...
Também relacionado:
O operador de conversão tenta converter um objeto em um tipo específico e lança uma exceção se falhar.
Exemplo:
StringBuilder b = (StringBuilder)someObject.
is
não verifica se um objeto pode ser convertido para um tipo específico. Um número inteiro lança uma multa longa, mas 10 is long
é falso.
(long)some_integer
vai falhar? Eu tenho certeza que nós dois sabemos que isso não é verdade, mesmo sem executá-lo. Por favor, explique o que você quer dizer.
is
: " Observe que o operador is considera apenas conversões de referência, conversões de boxe e unboxing. Outras conversões, como conversões definidas pelo usuário, não são consideradas. " (Msdn.microsoft.com/en-us/library/scekt9xw .aspx). Sobreas
: " Note-se que o como .. Executa operador apenas conversões de referência, conversões nulo, e conversões de encaixotamento A como operador não pode executar outras conversões, como conversões definidas pelo utilizador, que devem em vez disso ser realizados usando expressões de difusão " ( msdn .microsoft.com / pt-br / library / cscsdfbt.aspx )
A diferença entre IS e As é que ..
O operador IS - Is é usado para verificar a compatibilidade de um objeto com um determinado tipo e retorna o resultado como um booleano (verdadeiro ou falso).
O operador AS - As é usado para converter o objeto em um determinado tipo ou classe.
Ex.
Student s = obj as Student;
é equivalente a:
Student s = obj is Student ? (Student)obj : (Student)null;
is
pode ser expresso com as
e as
pode ser expresso com is
. Aqui está como fazer um is
com a as
palavra - chave. Bool b = obj is Student;
é equivalente a: Bool b = (obj as Student) != null;
Mais informações aqui
Ambos is
eas
palavras chave são usadas para conversão de tipo em C #.
Ao examinar o código IL de usos de ambas as palavras-chave, você perceberá facilmente a diferença.
Código 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
}
Código IL (para o código C # acima está na imagem em anexo):
O código IL para is
uso de palavras-chave contém instruções IL isinsta
e castclass
.
Mas o código IL para as
uso de palavras-chave possui apenas isinsta
.
No uso mencionado acima, ocorrerão duas digitações onde a is
palavra-chave é usada e apenas uma digitação onde a as
palavra-chave é usada.
Nota: Se você estiver usando a is
palavra-chave para verificar alguma condição e não tiver interesse no resultado da conversão de tipo, haverá apenas um tipo de conversão, ou seja
if (baseclassInstance is DerivedClass)
{
// do something based on the condition check.
}
is
e as as
palavras - chave serão usadas com base na necessidade.
A palavra-chave is verifica se o valor no lado esquerdo é uma instância do tipo no lado direito. Por exemplo:
if(obj is string)
{
...
}
Observe que, nesse caso, você terá que usar uma conversão explícita extra para obter obj como string.
A palavra-chave as é usada para converter tipos anuláveis. Se o valor especificado não for uma instância do tipo especificado, será retornado nulo. Por exemplo:
string str = obj as string;
if(str != null)
{
...
}
Eu diria: leia o MSDN online, mas aqui está:
O operador is verifica se um objeto é compatível com um determinado tipo e o resultado da avaliação é um booleano: verdadeiro ou falso.
O operador as nunca lançará uma exceção.
O operador Is, uma conversão, retorna true se for bem-sucedido. Retorna false se o elenco falhar. Com ele, você não pode capturar a variável convertida. Esse operador é mais útil ao verificar tipos em instruções e expressões if. O cast é apenas ideal se a variável resultante não for necessária para uso posterior
Como é um elenco. Com isso, obtemos desempenho e evitamos exceções quando um elenco é inválido. Nulo é retornado quando o elenco é impossível. Para tipos de referência, o as-cast é recomendado. É rápido e seguro. Podemos testar a variável resultante contra nula e usá-la. Isso elimina lançamentos extras
is OPERATOR O operador is em C # é usado para verificar o tipo de objeto e retorna um valor bool: true se o objeto é do mesmo tipo e false se não. ou também O operador "is" é usado para verificar se o tipo de tempo de execução de um objeto é compatível com um determinado tipo ou não. Para objetos nulos, ele retorna false, por exemplo
if(obj is AnimalObject)
{
//Then Work
}
como OPERADOR
O operador as faz o mesmo trabalho de is operator, mas a diferença é, em vez de bool, ele retorna o objeto se eles forem compatíveis com esse tipo; caso contrário, ele retornará nulo. tipos.
por exemplo
Type obj = Object as Type;
Vantagens de over over is No caso de is operator, para digitar cast, precisamos executar duas etapas:
Check the Type using is
If it’s true then Type cast
Na verdade, isso afeta o desempenho, pois cada vez que o CLR passa pela hierarquia de herança, verificando cada tipo de base com o tipo especificado.
Para evitar isso, use como, ele fará isso em uma única etapa. Somente para verificar o tipo, devemos usar o operador is.
O operador As é semelhante a uma conversão, mas retorna nulo em vez de uma exceção, se falhar.
E o operador Is é usado para verificar se um objeto é compatível com um determinado tipo. Geralmente é usado nas instruções If.
is
: O operador is é usado para verificar se o tipo de tempo de execução de um objeto é compatível com um determinado tipo
as
: O operador as é usado para realizar conversões entre tipos compatíveis.
object s = "this is a test";
string str=string.Empty;
if( s is string)
str = s as string;
is
isso as
: desembala duas vezes. Para tipos de referência, você deve apenas fazer e as
, em seguida, verificar nulo para ver se funcionou.
Dê uma olhada no vídeo do youtube abaixo, que explica a diferença de uma maneira mais demonstrativa e visual: -
https://www.youtube.com/watch?v=IKmRtJcRX_I
Abaixo segue a longa resposta com a explicação do código.
A palavra-chave "IS" é útil para verificar se os objetos são compatíveis com um tipo. Por exemplo, no código abaixo, estamos verificando se o objeto "ocust" é um tipo de classe "Customer".
object ocust = new Customer();
if (ocust is Customer)
{
A palavra-chave "AS" ajuda a fazer a conversão de um tipo para outro. Por exemplo, no código abaixo, estamos convertendo objeto para um tipo de dados string. Se a palavra-chave "AS" não puder digitar cast, ela retornará NULL.
object o = "somestring";
string str = o as string;
Palavra-chave IS -> verifica se o tipo de um determinado objeto é compatível com o novo tipo de objeto. Nunca lança uma exceção. Este é um tipo booleano .. retorna true ou 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.`
Palavra-chave AS: verifica se o tipo de um determinado objeto é compatível com o novo tipo de objeto. Retorna não nulo se o objeto fornecido for compatível com o novo, caso contrário nulo. Isso gera uma exceção.
`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`
Ambos os operadores são usados para fundição do tipo seguro.
Operador AS:
O operador AS também verifica se o tipo de um determinado objeto é compatível com o novo tipo de objeto. Essa palavra-chave verificará se o tipo de um determinado objeto é compatível com o novo tipo de objeto. Se não for compatível com o novo, ele retornará NULL.
Operador de SI:
Este operador verifica se o tipo de um objeto é compatível com o novo objeto. Se for compatível, retorna true, caso contrário, false.