Isto não está correto. isnã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.
Martin Smith
9
@ MartinSmith: Você está misturando conversão de tipos com fundição. Um número inteiro pode ser convertido para comprido, mas não pode ser convertido para comprido porque não é comprido.
Guffa 23/08/16
2
Você está me dizendo que um número inteiro não pode ser convertido por muito tempo? Isso (long)some_integervai 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.
Martin Smith
12
@ MartinSmith: Você ainda está confundindo a transmissão com a conversão. Você não está convertendo um número inteiro em um comprimento, está convertendo um número inteiro em um comprimento. Embora eles usem a mesma sintaxe, as referências são convertidas e os valores são convertidos.
Guffa
2
Observação sobreis : " 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 )
user1234567
33
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 asStudent;
é equivalente a:
Student s = obj isStudent?(Student)obj :(Student)null;
A equivalência mostra claramente qual dos dois é mais primitivo e subjacente à sua relação elegantemente! Obrigado pela equivalência!
Musa Al-hassy 01/07/2015
1
@ MusaAl-hassy Na verdade, isso não mostra o que é mais primitivo. ispode ser expresso com ase aspode ser expresso com is. Aqui está como fazer um iscom a aspalavra - chave. Bool b = obj is Student; é equivalente a: Bool b = (obj as Student) != null; Mais informações aqui
Alex Telon
8
Ambos iseas 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 =newDerivedClass();DerivedClass derivedclassInstance;if(baseclassInstance isDerivedClass){
derivedclassInstance =(DerivedClass)baseclassInstance;// do something on derivedclassInstance}
derivedclassInstance = baseclassInstance asDerivedClass;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 isuso de palavras-chave contém instruções IL isinstae castclass.
Mas o código IL para asuso de palavras-chave possui apenas isinsta.
No uso mencionado acima, ocorrerão duas digitações onde a ispalavra-chave é usada e apenas uma digitação onde a aspalavra-chave é usada.
Nota: Se você estiver usando a ispalavra-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 isDerivedClass){// do something based on the condition check.}
ise as aspalavras - 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 isstring){...}
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:
O operador "as" também não lançará uma exceção; ele retornará nulo.
Pinte Dani
Corrigido o erro de digitação referente a 'é' e 'como'
Patrick Peters
2
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 isAnimalObject){//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 =ObjectasType;
Vantagens de over over is
No caso de is operator, para digitar cast, precisamos executar duas etapas:
Check the Type using isIf 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.
Sua resposta está correta, mas seu código de amostra é um antipadrão. É caro fazer isisso as: desembala duas vezes. Para tipos de referência, você deve apenas fazer e as, em seguida, verificar nulo para ver se funcionou.
Steven Sudit 24/09/10
1
Dê uma olhada no vídeo do youtube abaixo, que explica a diferença de uma maneira mais demonstrativa e visual: -
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 =newCustomer();if(ocust isCustomer){
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.
Tanto o IS quanto o AS são usados para fundição de tipo seguro
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 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.`
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.
Respostas:
é
O
is
operador verifica se um objeto pode ser convertido para um tipo específico.Exemplo:
Como
O
as
operador tenta converter um objeto em um tipo específico e retorna nulo se falhar.Exemplo:
Também relacionado:
Fundição
O operador de conversão tenta converter um objeto em um tipo específico e lança uma exceção se falhar.
Exemplo:
fonte
is
não verifica se um objeto pode ser convertido para um tipo específico. Um número inteiro lança uma multa longa, mas10 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.
é equivalente a:
fonte
is
pode ser expresso comas
eas
pode ser expresso comis
. Aqui está como fazer umis
com aas
palavra - chave.Bool b = obj is Student;
é equivalente a:Bool b = (obj as Student) != null;
Mais informações aquiAmbos
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 #:
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 ILisinsta
ecastclass
.Mas o código IL para
as
uso de palavras-chave possui apenasisinsta
.No uso mencionado acima, ocorrerão duas digitações onde a
is
palavra-chave é usada e apenas uma digitação onde aas
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 sejais
e asas
palavras - chave serão usadas com base na necessidade.fonte
A palavra-chave is verifica se o valor no lado esquerdo é uma instância do tipo no lado direito. Por exemplo:
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:
fonte
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.
fonte
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
fonte
fonte
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
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
Vantagens de over over is No caso de is operator, para digitar cast, precisamos executar duas etapas:
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.
fonte
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.
fonte
is
: O operador is é usado para verificar se o tipo de tempo de execução de um objeto é compatível com um determinado tipoas
: O operador as é usado para realizar conversões entre tipos compatíveis.fonte
is
issoas
: desembala duas vezes. Para tipos de referência, você deve apenas fazer eas
, 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".
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.
fonte
vs
O segundo retornará null se obj não for uma MyClass, em vez de lançar uma exceção de conversão de classe.
é retornará apenas verdadeiro ou falso
fonte
Tanto o IS quanto o AS são usados para fundição de tipo seguro
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
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.
fonte
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.
fonte