2009-03-17 13 views
17

Sería realmente agradable si C# permitiera un operador ?? =. He encontrado a mí mismo escribiendo la siguiente frecuencia:¿Un operador de asignación coalescente nulo?

something = something ?? new Something(); 

Prefiero escribir así:

something ??= new Something(); 

Pensamientos? Las nuevas extensiones de lenguaje son siempre controvertidas por naturaleza.

+0

Evitaría incluir demasiadas construcciones bastante oscuras en el lenguaje, si fuera C# arquitecto jefe ..... Además, el operador = == realmente no me parece tan intuitivo, honestamente. –

+2

duplicar http://stackoverflow.com/questions/558010/why-cant-i-do-in-c –

+3

No sería nueva, se seguiría la convención abreviada de otros operadores –

Respuesta

1

Sinceramente estoy desgarrado con el operador = ++ en primer lugar, y su uso es bastante amplio y común. Desde el punto de vista de la claridad, la pareja extra de caracteres que necesita escribir probablemente no valga la pena cambiar el idioma para agregar un ?? =. Si esto fuera un voto, votaría en contra de ese cambio en el idioma (buena pregunta, mala idea. :-)

No he intentado esto, pero ¿podría mapear? = A una macro en el estudio visual que acaba de hacer la reescritura para usted?

+2

No hay operador '= ++'. Supongo que te refieres al operador de asignación compuesta '+ ='. En ese caso, hay una razón para su inclusión ya que 'a + = b' no es solo una abreviatura de' a = a + b'. Echar un vistazo a https://msdn.microsoft.com/en-us/library/aa691316%28v=vs.71%29.aspx como punto de partida para más información. – 0b101010

+0

en el idioma que será sólo un azúcar sintáctico, que significa cuando compilación, el compilador "ampliar" que en la normal, al igual que una gran cantidad de otro operador. No es una petición tan mala. De todos modos, la idea de VS macro también es buena, pero no la respuesta real. – Raffaello

2

Yo diría que el operador ?? y, más pertinentemente, el patrón anterior no es tan común, por lo que un nuevo operador es excesivo.

+0

Mis pensamientos exactamente. –

+0

sería azúcar sintáctico, nada más y nada nuevo .... – Raffaello

2

No estoy necesariamente en contra del operador, sin embargo, ese tipo de reutilización variable simplemente no me parece la "manera correcta". Los errores que debería haber sido punteros NULL obvias terminan poblada con datos inesperados y el trabajo de alguna manera inesperada, etc ....

2

Como ?? es la abreviatura de usar el operador ternario de una manera similar a:

(myObject != null) ? myObject : somethingElse; 

en lugar de abreviar para una operación aritmética, no creo que una operación ??= sea adecuada. Es un operador condicional.

+0

si desea comprobar la condición nula de estado de una variable y asignarla a sí mismo sólo en el caso de null, es un buen ajuste. p.ej. '_date = _date ?? value; ' – Rice

14

Otros lenguajes de programación como Ruby utilizan esta bastante frecuencia:

something ||= Something.new 
4

Si 'algo' es un campo privado para un acceso de propiedad, puede hacer lo siguiente .... esto llevaría a cabo la asignación si el el campo es nulo.

private Something something; 
public Something Something 
{ 
    get 
    { 
     return something ?? (something = new Something()); 
    } 
} 
+0

Esto no resuelve la intención del operador. La intención de mi pregunta era preguntar si había planes para incorporar un operador = y eso tendría sentido. El ejemplo de código anterior no simplifica el código y debe escribirse para cada caso. – CodeMonkeyKing

2

De hecho, lo implementé para PHP7. Ahora está en la etapa de propuesta de RFC. https://github.com/php/php-src/pull/1795

En realidad se trataba de una pregunta sobre el operador nulo coalescente en PHP7. Mira esto:

$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? ‘value’; 
I want to check if some var is null and if the same var is null set the same var to ‘value’. 

Por lo tanto estoy repitiendo la misma variable después de que el operador de igualdad, esto no se siente bien.

Así que siento que necesitamos otro operador como "?? =" similar a + =;

$ this-> request-> data ['comments'] ['user_id'] ?? = 'value'. Entonces, si var es nulo, se establece en 'valor' y de lo contrario permanece igual.

En esa solicitud de extracción traté de implementar esto.

$ sapi/cli/php -r '$num = null;$num ??= 5; echo $num;' 
5 
+0

Es bueno saberlo, pero la solicitud original era para hacer esto en C#. – CodeMonkeyKing

+0

https://wiki.php.net/rfc/null_coalesce_equal_operator –

Cuestiones relacionadas