Możliwe duplikaty:
Direct casting vs operator „as”?
Czy ktoś może mi wyjaśnić różnicę i który z nich jest lepszy? Wiem, że w niektórych sytuacjach mogę używać tylko jednego lub drugiego.
(int)value
value as int
Odpowiedzi:
2 dla odpowiedzi № 1Ten ostatni jest nieważny. Możesz użyć
value as int?
jeśli chcesz „przekonwertować, jeśli to możliwe”. To wolniejsze niż
if (value is int)
{
int x = (int) value;
...
}
chociaż. Tego prawdopodobnie powinieneś użyć, jeśli nie jesteś tego pewien value
w rzeczywistości jest int
. Jeśli jednak kod jest taki, że jeśli value
isn "t an int
, co oznacza błąd, a następnie wystarczy bezwarunkowo wysłać:
int x = (int) value;
Jeśli to się nie powiedzie, wygeneruje wyjątek - który jest ogólnie odpowiedni dla błędu.
0 dla odpowiedzi nr 2
ja value as int
spowoduje błąd kompilatora, ponieważ operator must be used with a reference type or nullable type ("int" is a non-nullable value type)
. Więc kiedy masz do czynienia z strukturami, zawsze używasz (int)value
a z Przedmiotami wolę obj as SomeType
ponieważ jest wyraźniejszy i bardziej bezpośredni do rzeczy, a ponadto automatycznie obsługuje wyjątki (jeśli wystąpi błąd podczas rzutowania, operator zwraca wartość null).