2012-05-23 10 views
5
return (
     Page is WebAdminPriceRanges || 
     Page is WebAdminRatingQuestions 
); 

¿Hay una manera de hacerlo como:"es" C# múltiples opciones

return (
    Page is WebAdminPriceRanges || WebAdminRatingQuestions 
); 
+0

No creo que sea posible, y no tiene sentido. –

+1

El operador is toma dos operandos en C#. Eso es realmente todo lo que hay para decir. Sin embargo, con un poco de fantasía, "podría ser" similar a 'IsAnyOf (x, myListOfTypes)' (usaría 'IsAssignableFrom' internamente, no' is'.) De hecho, he visto esto antes en SO. (Intente buscar 'IsAssingableFrom'.) –

+0

p. http://stackoverflow.com/questions/3013694/use-of-isassignablefrom-and-is-keyword-inc-c-sharp –

Respuesta

1

No. La primera forma en que ha especificado es la única forma razonable de hacer esto .

3

No, tal sintaxis no es posible. El operador is requiere 2 operandos, el primero es una instancia de un objeto y el segundo es un tipo.

Usted podría utilizar GetType():

return new[] { typeof(WebAdminPriceRanges), typeof(WebAdminRatingQuestions) }.Contains(Page.GetType()); 
3
No

realmente. Puede buscar la instancia Type dentro de una colección, pero eso no tiene en cuenta las conversiones implícitas que is realiza; por ejemplo, is también detecta si el tipo es base de la instancia en la que opera.

Ejemplo:

var types = new[] {typeof(WebAdminPriceRanges), typeof(WebAdminRatingQuestions)}; 

// this will return false if Page is e.g. a WebAdminBase 
var is1 = types.Any(t => t == Page.GetType()); 

// while this will return true 
var is2 = Page is WebAdminPriceRanges || Page is WebAdminRatingQuestions; 
1

n, C# no es el idioma Inglés, no se puede omitir un operando de una operación de dos operando.

0

No, no puedes hacer esto.

si su intención es devolver una página, única si es de tipo WebAdminPriceRangesoWebAdminRatingQuestions, que fácilmente puede hacerlo con si.

Por ejemplo:

if(Page is WebAdminPriceRanges || Page is WebAdminRatingQuestions) 
    return Page; 
return null; 

Si se asume que es una página de referencia tipo o al menos valor anulable tipo

0

Las demás respuestas son ciertas, pero aunque no estoy seguro de cuál es la prioridad del operador. Si el operador es más bajo que el operador lógico u operador, estarías dividiendo dos clases juntas, lo que no tiene sentido.

Cuestiones relacionadas