¿Por qué ReSharper no sugiere el uso de propagación nula para ambos bloques?

4
Drawgo 2019-10-21 13:32.

ReSharper sugiere usar propagación nula para el bloque if "dañino", pero para el "forceVelocityCalculator" no hay ninguna sugerencia.

void Damage(Collider hitCollider)
{
    IDamageable damageable = hitCollider.GetComponent<IDamageable>();

    if (damageable != null)
    {
        damageable.TakeDamage(_damage);
    }
}

void Push(Collider hitCollider)
{
    ForceVelocityCalculator forceVelocityCalculator = hitCollider.GetComponent<ForceVelocityCalculator>();

    if (forceVelocityCalculator != null)
    {
        forceVelocityCalculator.Push(_pushForce, GameAPI.playerTransform.transform.forward);
    }
}

¿Me estoy perdiendo de algo? Usaría propagación nula para ambos bloques.

2 answers

12
Tenretni 2019-10-21 21:05.

Unity ofrece una publicación de blog sobre este tema, pero a continuación se incluye un breve resumen.

La propagación nula en los objetos de Unity, de los que heredan sus componentes, es incorrecta. Resharper no sugiere hacerlo y Visual Studio 2019 da una advertencia al respecto.

¿Por qué ocurre la sugerencia IDamageable? Porque es una interfaz. El IDE (editor de código) no conoce el tipo de una instancia de esta interfaz. No puede saber que IDamageablehereda de UnityEngine.Object, por lo que no ocurre ninguna sugerencia. ForceVelocityCalculator, sin embargo, hereda de MonoBehaviouro ScriptableObjectambos heredan UnityEngine.Object. Esto es importante porque Unity ha personalizado el ==operador. De esta manera, la comparación de igualdad predeterminada a la que está acostumbrado no es lo que sucede.

La publicación del blog da dos razones para esta decisión:

  1. Dentro del Editor, Unity tiene su propio concepto de nulo. Los campos sin inicializar de a MonoBehaviourreciben este valor nulo específico de Unity. Esto, combinado con un ==operador personalizado , permite que Unity le brinde información adicional a usted, el desarrollador, mientras desarrolla. En lugar de recibir un NullReferenceExceptionseguimiento de pila estándar y, en su lugar, recibe un seguimiento de pila mejorado más alguna indicación de para qué GameObjectexiste el problema. Las publicaciones del blog mencionan una característica interesante en la que resaltan la problemática GameObjectdentro del panel Jerarquía.

  2. Dado que Unity es un motor C / C ++ y usted escribe scripts en C #, puede pensar en sus objetos C # "envolviendo" los objetos C ++. Toda la información sobre ese GameObject (componentes adjuntos, HideFlags, etc.) está en el objeto C ++. Además, la vida útil de estos objetos C ++ se administra explícitamente. Es por eso que usa en Object.Destroy()lugar de establecer las cosas en nulo. El ==operador personalizado resuelve el escenario en el que un objeto C ++ ha sido destruido pero el objeto C # "envolvente" sigue vivo. En este caso, CSharpObject == nulldevuelve verdadero, aunque técnicamente su objeto C # no es nulo.

3

Probablemente debido a cómo Unity ha definido lo que viene de GetComponent()

Si realmente observa lo que hace GetComponent, en realidad nunca regresa null, siempre obtiene un contenedor de objetos que maneja la comunicación entre su código C # y el código C ++ subyacente de Unity.

Entonces, cuando obtiene "nulo" de GetComponent()lo que realmente obtiene (¡Unity ha anulado el ==operador !) No es realmente nulo, sino un contenedor de objeto alrededor de un null. Entonces, ReSharper no sabe que la propagación nula sería útil aquí (asumiendo, por supuesto, que funciona: debido a que el objeto no es realmente nulo, simplemente finge ser nulo, ¡el azúcar sintáctico podría no funcionar correctamente!).

Related questions

MORE COOL STUFF

Cate Blanchett se acostó con su esposo después de 3 días juntos y sigue casada con él 25 años después

Cate Blanchett se acostó con su esposo después de 3 días juntos y sigue casada con él 25 años después

Cate Blanchett desafió los consejos típicos sobre citas cuando conoció a su esposo.

Por qué Michael Sheen es un actor sin fines de lucro

Por qué Michael Sheen es un actor sin fines de lucro

Michael Sheen es un actor sin fines de lucro, pero ¿qué significa eso exactamente?

¡La estrella de Hallmark, Colin Egglesfield, habla sobre emocionantes encuentros con fans en RomaDrama Live! [Exclusivo]

¡La estrella de Hallmark, Colin Egglesfield, habla sobre emocionantes encuentros con fans en RomaDrama Live! [Exclusivo]

¡La estrella de Hallmark, Colin Egglesfield, habló sobre los emocionantes encuentros con los fanáticos en RomaDrama Live! además de su programa INSPIRE en la convención.

Por qué no puedes transmitir 'Northern Exposure' en línea

Por qué no puedes transmitir 'Northern Exposure' en línea

Tendrás que desempolvar un reproductor de Blu-ray o DVD para ver por qué Northern Exposure se convirtió en uno de los programas más populares de los 90.

Dona tu cabello para ayudar a mantener limpia nuestra agua

Dona tu cabello para ayudar a mantener limpia nuestra agua

Los recortes de cabello de los salones y las donaciones personales se pueden reutilizar como tapetes que absorben los derrames de petróleo y ayudan a proteger el medio ambiente.

Una mirada a las bodas más memorables de la Casa Blanca

Una mirada a las bodas más memorables de la Casa Blanca

Solo unas pocas personas se han casado en la Casa Blanca en los últimos más de 200 años. ¿Quiénes eran y qué se requiere para marcar una boda allí?

¿Cuál es la toronja más dulce: blanca, roja o rosada?

¿Cuál es la toronja más dulce: blanca, roja o rosada?

¿Tu boca se emociona al pensar en comer una toronja jugosa? Bueno, frunce el ceño, porque la toronja está repleta de vitaminas y antioxidantes que tu cuerpo necesita.

¿Cuál es la diferencia entre levaduras secas instantáneas y activas?

¿Cuál es la diferencia entre levaduras secas instantáneas y activas?

La levadura es el componente mágico de la cocción que hace que la masa suba. Pero hay muchos tipos por ahí. ¿Cuál es el adecuado para tu receta?

Bueno, las comparaciones de Mike Tyson no estaban del todo mal

Bueno, las comparaciones de Mike Tyson no estaban del todo mal

Sí, eso parece morder. Después de ser nombrado Prospecto del Año 2020 por varias publicaciones, incluidas Sports Illustrated y The Athletic, Edgar Berlanga, de 25 años, fue aclamado como el puertorriqueño Mike Tyson.

Cómo luchar contra Fox News con mercados publicitarios en línea laberínticos

Cómo luchar contra Fox News con mercados publicitarios en línea laberínticos

Digamos que usted es una persona razonable que está razonablemente enojada con el manejo de las noticias por parte de Fox News. Tal vez sea la forma en que sus anfitriones arrojaron mentiras peligrosas en el punto álgido de la pandemia de COVID-19, o la forma en que continúan contando descaradamente la historia de la insurrección del 6 de enero.

Minecraft se ve maravillosamente relajante en estrategia Spin-Off que viene el próximo año

Minecraft se ve maravillosamente relajante en estrategia Spin-Off que viene el próximo año

Minecraft obtendrá otro spin-off en 2023. El éxito de ventas continuo de Mojang ahora se está ramificando en el género de estrategia con Minecraft Legends, que se ve brillante y sereno incluso cuando estás derribando los muros del castillo enemigo.

El nuevo Forza Motorsport, disponible la próxima primavera, es de alguna manera incluso más bonito que Forza Horizon 5

El nuevo Forza Motorsport, disponible la próxima primavera, es de alguna manera incluso más bonito que Forza Horizon 5

Hoy, en la gran exhibición de juegos de Microsoft, el editor mostró la próxima entrada tan esperada en su serie de carreras insignia, Forza Motorsport. El nuevo juego no tiene un número de secuela y saldrá en la primavera de 2023.

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

Emma Stone pone a la venta su casa en la playa de Cliffside Malibu por $ 4.2 millones: ¡vea el interior!

Emma Stone pone a la venta su casa en la playa de Cliffside Malibu por $ 4.2 millones: ¡vea el interior!

La casa de mediados de siglo del ganador del Oscar cuenta con tres dormitorios, dos baños y vistas al mar

Jeannie Mai Jenkins dice que "se deprimió mucho, mucho" durante su experiencia de amamantar

Jeannie Mai Jenkins dice que "se deprimió mucho, mucho" durante su experiencia de amamantar

"Te sientes tan derrotada cuando tu bebé tiene hambre que no estás produciendo lo suficiente para el bebé", dijo Jeannie Mai Jenkins sobre amamantar a su hija de 4 meses, Monaco.

La esposa de Bobby Brown, Alicia, no se enfoca en su pasado: "Bobby y Whitney fueron su momento, soy el Yin de su Yang"

La esposa de Bobby Brown, Alicia, no se enfoca en su pasado: "Bobby y Whitney fueron su momento, soy el Yin de su Yang"

La pareja de casi 10 años comparte su historia de amor antes de la nueva serie de realidad de A&E Bobby Brown: Every Little Step, que se estrenará el 31 de mayo.

Notas de inversión: Bioscout AU $ 3m Seed

Notas de inversión: Bioscout AU $ 3m Seed

Bioscout tiene la misión de poner a los agricultores en el asiento del conductor y estamos entusiasmados de respaldar al equipo en su última ronda de semillas junto con Artesian (GrainInnovate) y Uniseed. El problema La pérdida significativa de cosechas por enfermedades fúngicas ha resultado ser un calvario para los agricultores.

Pequeña investigación de mercado 1 | Quick Glimpse Telehealth Market en 2022

Pequeña investigación de mercado 1 | Quick Glimpse Telehealth Market en 2022

La telesalud no es nueva ni siquiera una vertical obsoleta en la era posterior a la pandemia. Pero cuando miramos más de cerca la industria, muestra una fuerte sostenibilidad en la demanda y la oferta y una fuerte curva de crecimiento potencial que sería una revolución constante en los EE. UU.

Clima de financiación de empresas emergentes: ¿Qué sigue para el ecosistema de empresas emergentes de Tailandia?

Clima de financiación de empresas emergentes: ¿Qué sigue para el ecosistema de empresas emergentes de Tailandia?

El año 2021 fue un año récord para la financiación de capital de riesgo (VC) a nivel mundial. El sudeste asiático no fue la excepción, ya que la región acuñó un récord de 25 nuevos unicornios en el año, según DealStreetAsia.

Más allá de la Ley de Moore

Más allá de la Ley de Moore

Existe una brecha que crece exponencialmente entre nuestro apetito por la computación y lo que puede ofrecer la Ley de Moore. Nuestra civilización se basa en la computación: debemos encontrar tecnologías que trasciendan las limitaciones actuales de la arquitectura y la imaginación.

Language