2009-09-08 13 views
9

¿Por qué la siguiente línea de código no funcionaría en un método?Uso de retorno y short-hand si está en C#

return (count > 0) ? true : false; 

funciona perfectamente bien si lo hago:

bool ret = (count > 0) ? true : false; 
return ret; 

Pregunta extra: ¿Es realmente más rápido o más eficaz que el estándar de un informe si?

bool ret = false; 
if(count > 0) 
    ret = true; 
return ret; 

¿Cuál recomendaría usted?

+1

Supongo que no hay error de tiempo de compilación, solo que el método devuelve el valor incorrecto? – ChrisF

+0

Fue un error de tiempo de compilación ... Hubo un error en mi sintaxis. –

+0

lo que sucede con frecuencia en el caso del operador terciario es que la evaluación del primer resultado (recuento> 0) determina el valor de retorno que utilizará la función. Supongo que su función devuelve bool?
Intentaré determinar el valor de (contar> 0). Si ese es el problema, es posible que tenga que presentar la declaración completa:
return (bool) ((count> 0)? True: false); es una rareza que he visto en otros lugares. – KevinDTimm

Respuesta

38

recomendaría:

return count > 0; 

No hay necesidad de volver explícitamente true o false.

Habiendo dicho eso, su error de compilación me intriga. A primera vista, parece que debería funcionar. ¿Podría publicar un ejemplo breve pero completo que no se compila? El tipo de esa expresión condicional debe ser bool sin problemas. Supongo que tienes un escenario más complicado y, al simplificar el ejemplo, eliminaste el problema real.

En cuanto a la pregunta de bonificación: No sé cuál sería más rápido, ni me importa en el 99,99% de los casos. Sería sorprendido para encontrar que causó cualquier retraso significativo, a menos que prohíbe la alineación por alguna razón. Elija la solución más legible, que es la declaración de devolución simple, IMO.

+1

+1. Excepto en algunos (raros) casos, legibilidad> todos. –

+0

Gracias Jon, el problema fue un error de sintaxis simple que pasó desapercibido (generalmente hasta DESPUÉS de que preguntes qué hay de malo en SO). Me gusta esta respuesta, ¡es aún más corta! recuento de devolución> 0; –

+1

hombre que siempre me golpeaste ... –

10

probar esto:

return count > 0; 

antes del retorno devuelve la expresión contador> 0 se evalúa y da verdadero o falso.

esto también debería funcionar:

return (count > 0 ? true : false); 

pero recomiendo que no lo hace.

Siempre trato de mantener la cantidad de operaciones horizontales bajas, creo que hace que sea más fácil leer el código.

simplemente imaginar el siguiente escenario que se acaba de confundir :)

return count > 0 ? false : true; 
1

esto funciona

return (count > 0 ? true : false); 

A continuación, puede hacer que devuelve otros valores de verdadero y falso. En su caso particular, me gustaría recibir otras sugerencias; recuento de devolución> 0;

5

Desde el punto de vista de C#

return count > 0; 

es mejor para él es readabilty.

Pero el compilador optimiza el código, por lo que las tres opciones son las mismas una vez compiladas. ¡Podría tratar de ver el código IL para verificar!

Cuestiones relacionadas