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

Czy istnieje sposób, aby zrobić to lubią:"jest" C# wiele opcji

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

Nie sądzę, że jest to możliwe i nie ma znaczenia. –

+1

Operator is pobiera dwa operandy w języku C#. To naprawdę wszystko, co można powiedzieć. Jednak z odrobiną fantazji "może być" podobne do 'IsAnyOf (x, myListOfTypes)' (używałoby 'IsAssignableFrom' wewnątrz choć nie" jest ".) W rzeczywistości widziałem to już wcześniej w SO. (Spróbuj wyszukać 'IsAssingableFrom'.) –

+0

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

Odpowiedz

1

nr Pierwszy sposób określony jest jedynym rozsądnym sposobem, aby to zrobić .

3

Nie, takie składnia nie jest możliwe. Operator is wymaga 2 operandów, pierwszy to instancja obiektu, a druga to typ.

Można użyć GetType():

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

niezupełnie. Możesz wyszukać instancję Type wewnątrz kolekcji, ale to nie uwzględnia niejawnych konwersji wykonywanych przez is; na przykład is również wykrywa, czy typ jest podstawową instancji, na której działa.

Przykład:

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

Nie, C# nie jest język angielski, nie można pominąć jeden operand z eksploatacji dwóch argumentu.

0

Nie, nie możesz tego zrobić.

jeśli intencją jest zwrócić stronie, tylko jeśli jest typu WebAdminPriceRangeslubWebAdminRatingQuestions, można łatwo zrobić z jeśli.

Na przykład:

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

zakładając, że strona jest odniesienia typu lub przynajmniej wartość pustych typ

0

Pozostałe odpowiedzi są prawdziwe, ale nie jestem pewien, gdzie pasuje operatorowi pierwszeństwo. Jeśli operator is jest mniejszy niż operator logiczny lub operator, łączyłbyś dwie klasy razem, co nie ma znaczenia.

Powiązane problemy