Pergunta

Eu comecei recentemente a trabalhar com JSON eo quadro ExtJs e eu me deparei com o seguinte código no exemplo.

nós recuperar a informação a partir do frontend usando este:

object updatedConfig = JavaScriptConvert.DeserializeObject(Request["dataForm"]);

Então no exemplo que faça o seguinte:

JavaScriptObject jsObj = updatedConfig as JavaScriptObject;

Eu nunca vi o "como" palavra-chave usada assim antes. Isto é apenas uma outra forma de boxe explicitamente a variável de updatedConfig como um JavaScriptObject Ou há algo que eu não estou entendendo sobre isso?

Graças

Foi útil?

Solução

Isto é conhecido como um elenco segura. O que é que é ele tenta elenco de um tipo para outro e se a conversão falhar ele retorna null invés de lançar uma InvalidCastException.

Na verdade, existem duas instruções IL separadas para lidar com a diferença entre "as" fundição e fundição estática normal. O seguinte código C # contém ambos os tipos de seleção de elenco:

using System;

class Program
{
    static void Main()
    {
        Object o = null;

        String s0 = (String)o;
        String s1 = o as String;
    }
}

O primeiro elenco usa a instrução castclass IL ea segunda elenco usa a instrução isinst.

Por favor, veja vs usando o 'como' palavra-chave em CLR para uma explicação mais detalhada.

Outras dicas

O como palavra-chave é um mais seguro maneira de elenco objetos em C #.

SomeType a = obj as SomeType;

significa que se obj é do tipo SomeType, obj serão lançados esse tipo. Se obj é nulo ou não é do tipo SomeType, um será nulo.

Outra vantagem do como palavra-chave é que ele vai lançar uma exceção tempo de compilação se o tipo não pode ser fundido onde, como (elenco) não quebrar até run-time.

Além disso, é importante lembrar que "como" opera na referência não no próprio objeto. É por isso que ele pode retornar nulo em vez de lançar uma exceção, porque o objeto permanecerá intacto. E é por isso que você só pode fazê-lo em tipos de referência.

Normalmente, isso não importa muito, mas se você implementar uma função de elenco (como aqui em MSDN ) ele irá não ser invocado usando como operador.

Assim, o operador as é útil para "mover para cima e para baixo da hiearchy herança": Se você tem uma classe Pessoa, que você pode fazer: Person p = novo pessoa (); ojbect o = p como objecto; p = O como Pessoa; Mas em todos os casos, o objeto na memória não será modificado de qualquer forma, apenas a referência a ele.

Espero que ajude

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top