2009-11-05 46 views

Respuesta

26
int five = 5; 
string answer = five == 5 ? "true" : "false"; 

veo que desea utilizar esto para escribir los valores en ASP.NET, la cadena answer llevará a cabo su valor deseado, el uso que a su gusto.

+5

Una variación >> string answer = five == 5? bool.TrueString: bool.FalseString; –

0

five==5?console.writeline('true'):console.writeline('false')

funciona así:

<if-expression> ? <code-when-if-expression-evaluates-true> : <code-when-if-expression-evaluates-false>

EDIT:

Lo que había sido probablemente thkinking:

<%=five==5?'true':'false'%>

+0

'Console.WriteLine' devuelve nulo. El operador ternario requiere un valor de retorno y se debe usar como expresión RH de una asignación. – Abel

+0

Ah, ¡Ups! No tengo un compilador delante de mí para probar. Oh bien. – FrustratedWithFormsDesigner

+0

¿de verdad lees mi pregunta que digo por asp.net no por winform y tu declaración no funcionó si haces esto en asp.net obtienes un error que "Mensaje de error del compilador: CS0201: solo asignación, llamada, incremento, decremento, y las nuevas expresiones de objeto se pueden usar como una declaración " –

2

En ASP.NET, declarativa (es decir, donde va el HTML):

<p>Is this five? <%= yourVariable == 5 ? "true" : "false"; %></p> 

O, alternativamente, en código subyacente (es decir, donde su código C# y las clases son):

someTextBox.Text = yourVariable == 5 ? "true" : "false"; 
9

El operador ternario en casi todos los idiomas funciona como una línea sentencia if:

Console.WriteLine((five == 5) ? 'true' : 'false'); 

(no debería ser necesario estrictamente los parens interiores, pero me gusta incluirlos para mayor claridad.)

Si t boolean evalúa como verdadero, luego toda la expresión es igual al valor entre ? y :. Si el valor booleano se evalúa como falso, la expresión es igual al valor después del :.

No creo que pueda incluir líneas de código en el medio del operador. Se supone que simplemente se trata de expresiones que reemplazan toda la "frase" del operador una vez que se evalúa la condición.

Soy un chico de Java y realmente no conozco C#; tal vez es diferente. Pero probablemente no.

+0

solo una nota: Console.WriteLine() no tiene nada que ver con ASP.NET –

+0

de acuerdo, pero otra nota: Me gusta tu explicación, ¡bien hecho! :) – Abel

+0

@rm: Heh, uy. Lo siento, estaba copiando el código del otro contestador y lo recordé desde el pequeño fragmento de C# que recordaba. :-) – Tenner

1
Response.Write(five == 5 ? "True" : "False"); 

Sin embargo, para este ejemplo, yo no utilizar el operador ternario en absoluto:

Response.Write(five == 5); 
4

le pueden impedir que sea muy simple.La comparación de cinco a 5 resultados en un valor lógico, por lo que el siguiente también es posible:

int five = 5; 
Console.WriteLine((five == 5).ToString()); 

ToString El bool de tipo () método ya está diseñado para devolver "verdadero" o "falso", y si el alternativa minúsculas que se necesita, eso es demasiado simple:

int five = 5; 
Console.WriteLine((five == 5).ToString().ToLower()); 

Si no lo necesita en minúsculas, en realidad se puede eliminar por completo la ToString así:

int five = 5; 
Console.WriteLine(five == 5); 
1

Solo para estar seguro, debe poner sus expresiones ternarias en parens(), porque el operador ternario?: Tiene una sutil precedencia que puede morderlo si no está mirando.

string answer = ((five==5) ? ("true") : ("false")); 

Es probablemente no es importante con este ejemplo, pero si el ternario es parte de una expresión compleja, reglas de prioridad podría hacer que el compilador de interpretar la expresión diferente de lo que pretende.

+0

Eso es un poco pesado en el paréntesis. –

+0

Los parens obligan al compilador a interpretar la expresión como se pretendía, anulando las reglas de precedencia incorporadas, que no son tan intuitivas como usted cree. Este es un ejemplo simple, pero a medida que la expresión se vuelve más compleja, hay más oportunidades para que el lenguaje malinterprete tus intenciones. – dar7yl

+1

Además, los parens son "gratis", al menos en los idiomas compilados. Pueden ayudar al lector a descifrar la expresión, especialmente si utiliza el espaciado como estilo de código. – dar7yl

0

Aún otra variación:

string message = XmlConvert.ToString(5 == five); 
Console.Write(message); 
0

lo más sencillo es Console.WriteLine ((cinco == 5) .ToString());

Cuestiones relacionadas