vi el siguiente código,C# - ¿Es esto comprobando necesario "obj es persona && obj = null!"
public override bool Equals(object obj)
{
// From the book http://www.amazon.co.uk/Pro-2010-NET-4-0-Platform/dp/1430225491
// Page 254!
if (obj is Person && obj != null)
...
}
Basado en mi conocimiento, creo que el código debe ser reescrita como sigue:
public override bool Equals(object obj)
{
if (obj is Person)
...
}
¿Es correcto?
Basado en http://msdn.microsoft.com/en-us/library/scekt9xw%28v=vs.80%29.aspx
An es expresión se evalúa a verdadero si la expresión proporcionada es no nulo, y el objeto proporcionado se puede convertir al tipo proporcionado sin causar una excepción a ser lanzado.
Creo que la comprobación adicional para null NO es necesaria en absoluto. En otras palabras, ese código "obj! = Null" nunca debería ser golpeado en absoluto.
Gracias
// // Actualizado
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
class Employee
{
public static void CheckIsEmployee(object obj)
{
if (obj is Employee)
{
Console.WriteLine("this is an employee");
}
else if (obj == null)
{
Console.WriteLine("this is null");
}
else
{
Console.WriteLine("this is Not an employee");
}
}
}
class NotEmployee
{ }
class Program
{
static void Main(string[] args)
{
Employee e = new Employee();
Employee.CheckIsEmployee(e);
Employee f = null;
Employee.CheckIsEmployee(f);
NotEmployee g = new NotEmployee();
Employee.CheckIsEmployee(g);
}
}
}
resultados de salida:
this is an employee
this is null
this is Not an employee
Depende de la definición de 'is' ;-) En el caso de .NET,' as' ejecuta internamente un 'is' y establece el resultado en' null' si 'is' es falso. La solución de jlew es más óptima si a veces se puede esperar 'null'. –
@Eric J: D. La razón para usar 'as' es principalmente tener el uso de la instancia tipeada más tarde. Entonces, en la solución de 'jlew', (presumiblemente) necesitarías lanzar' obj' como 'Persona' después de que hayas determinado que no era nulo para que puedas hacer el resto de la evaluación de Igual. Guarda una o dos líneas de código para el mismo resultado. – Thomas