Es el operador Null Coalescing. Significa que si la primera parte tiene valor, ese valor se devuelve; de lo contrario, devuelve la segunda parte.
ej .:
object foo = null;
object rar = "Hello";
object something = foo ?? rar;
something == "Hello"; // true
O algún código real:
IEnumerable<Customer> customers = GetCustomers();
IList<Customer> customerList = customers as IList<Customer> ??
customers.ToList();
Lo que este ejemplo está haciendo es la fundición los clientes como IList<Customer>
. Si esto arroja un resultado nulo, llamará al método LINQ ToList
en el cliente IEnumerable.
La sentencia if comparable sería la siguiente:
IEnumerable<Customer> customers = GetCustomers();
IList<Customer> customersList = customers as IList<Customer>;
if (customersList == null)
{
customersList = customers.ToList();
}
Lo cual es una gran cantidad de código en comparación con hacerlo en una sola línea usando el operador nulo coalescencia.
Si se pudiera buscar "??" en SO esto calificaría como un duplicado de, p. [esto] (http://stackoverflow.com/questions/770186/null-coalescing-operator-what-does-coalescing-mean). :-( –
1. Inicie C#. 2. '??' 3. PROFIT! – leppie
tenga cuidado debido a la prioridad de los operadores http://msdn.microsoft.com/en-us/library/6a71f45d.aspx – tom3k