Estoy trabajando a través de Josh Smith's CommandSink code obviamente no entiendo algo acerca de la palabra clave "como" en C#.¿Hay algo más en la palabra clave "#" de C# que en el simple casting?
No entiendo por qué escribió la línea:
IsValid = _fe != null || _fce != null;
ya que sólo necesita escribir:
IsValid = depObj != null;
Ya que nunca sería el caso de que el _fe sería nula y _fce no nulo, o viceversa, ¿verdad? ¿O me falta algo sobre cómo "as" arroja variables?
class CommonElement
{
readonly FrameworkElement _fe;
readonly FrameworkContentElement _fce;
public readonly bool IsValid;
public CommonElement(DependencyObject depObj)
{
_fe = depObj as FrameworkElement;
_fce = depObj as FrameworkContentElement;
IsValid = _fe != null || _fce != null;
}
...
RESPUESTA:
La respuesta es lo que dijo Marc en su comentario "que es el punto central de 'como' - que no lanzar una excepción - sólo se informa nula. "
y aquí está la prueba:
using System;
namespace TestAs234
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
Employee employee = new Employee();
Person.Test(customer);
Person.Test(employee);
Console.ReadLine();
}
}
class Person
{
public static void Test(object obj)
{
Person person = obj as Customer;
if (person == null)
{
Console.WriteLine("person is null");
}
else
{
Console.WriteLine("person is of type {0}", obj.GetType());
}
}
}
class Customer : Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
class Employee : Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
Ah, aprendes algo nuevo todos los días. Iba a sugerir algo similar, pero supuse que arrojaría una excepción si no podía emitir ... –
@Gordon: ese es el objetivo de "como" - no * lanzará una excepción - simplemente informa nulo. –