2009-02-09 7 views

Respuesta

129

Ésta es una manera:

if (!(sender is TextBox)) {...} 
+3

Por esta situación particular prefiero si (el remitente es TextBox == falso). Una sintaxis menos torpe como esta. –

+5

@hmemcpy: Personalmente, me estremezco cada vez que veo una comparación con una constante booleana. Probablemente mi fondo C se muestre a través de ... Aún así, hace que mi piel se arrastre, y no hay forma de que lo deje en el código que estaba editando. – Shog9

+0

@IgalTabachnik imo si va a escribir enunciados lógicamente invertidos con verbosidad para mayor claridad, se vuelve más claro escribirlo como 'if (falso == remitente es TextBox)' –

6

No se pudo también hacer de la manera más prolija "viejo", antes la palabra clave is:

if (sender.GetType() != typeof(TextBox)) { // ... } 
+11

Claro, podría, pero tenga en cuenta que la palabra clave "es" coincide con cualquier objeto derivado de TextBox, mientras que esta comprobación typeof() solo coincide con TextBoxes. – mquander

+1

Ah, no lo sabía. Aprende algo nuevo todos los días :) –

-1

Pruebe esto.

var cont= textboxobject as Control; 
if(cont.GetType().Name=="TextBox") 
{ 
    MessageBox.show("textboxobject is a textbox"); 
} 
+0

¿Por qué la línea inicial 'as Control', se comporta de forma diferente en comparación con' GetType() 'en un' objeto'? Aparte de eso, la comparación de cadenas para algo como esto no es un código amigable para la refactorización. – Stijn

-1

Si utiliza la herencia como:

public class BaseClass 
{} 
public class Foo : BaseClass 
{} 
public class Bar : BaseClass 
{} 

... nulos resistentes

if (obj?.GetType().BaseType != typeof(Bar)) { // ... } 

o

if (!(sender is Foo)) { //... } 
1

dos formas conocidas de hacerlo son :

1) Usando operador IS:

if (!(sender is TextBox)) {...} 

2) utilizando como operador (útil si también hay que trabajar con la instancia recuadro):

var textBox = sender as TextBox; 
if (sender == null) {...} 
Cuestiones relacionadas