2013-03-06 12 views
5

Pragnę zauważyć, żeCzy można przenosić z char?

int number = 'a'; 

jest dźwięk C wypowiedź #

Ale to wyrażenie

typeof(int).IsAssignableFrom(typeof(char)) 

zwraca false. Czy to nie jest sprzeczność?

+0

"a" zostanie przekonwertowane przez kompilator na int, więc nie jest. – Sinatr

+0

'int' nie można przypisać z' char'. Istnieje niejawna konwersja po przypisaniu jej w ten sposób, która jest zupełnie inna –

Odpowiedz

13

Czy nie jest to sprzeczność?

Nie. C# zapewnia niejawna konwersja z char do int, ale jeśli spojrzeć na dokumentacji Type.IsAssignableFrom stwierdza na wartości zwracanej:

prawdziwe, jeśli c oraz aktualny typ reprezentują ten sam typ, lub jeśli obecny typ jest w hierarchii dziedziczenia c lub jeśli bieżący typ jest interfejsem, który c implementuje, lub jeśli c jest parametrem generycznym, a bieżący typ reprezentuje jedno z ograniczeń c, lub c reprezentuje typ wartości i bieżący typ reprezentuje Nullable<c>. false, jeśli żaden z tych warunków nie jest prawdziwy, lub jeśli c ma wartość null.

Żaden z tych warunków nie jest prawdziwy, więc zwraca false.

+0

Zobacz także [Jak określić, czy typ A jest niejawnie konwertowalny na typ B] (http://stackoverflow.com/questions/2224266/how-to- tell-if-type-a-is-implicitly-convertible-to-type-b) – Justin

+0

Dzięki. Metoda jest znacznie bardziej skomplikowana niż sugerowana nazwa. –

1

Pytania, które zadasz, są nieco inne. Zestaw przypisywalnych wartości w C# jest na ogół bardziej permisywny niż zbiór możliwych do przypisania typów w CLR.

Powiązane problemy