2013-03-06 61 views
5

我注意到,int是從char分配的嗎?

int number = 'a'; 

是健全的C#聲明

但是表達

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

返回false。這不是矛盾嗎?

+0

'a'將由編譯器轉換爲int,所以不是。 – Sinatr 2013-03-06 17:16:00

+0

'int'不能從'char'指定。有一個隱式的轉換,當你指定它的方式,這是完全不同的 – 2013-03-06 17:16:16

回答

13

這不是矛盾嗎?

沒有。 C#提供了從charint的隱式轉換,但如果你看看文檔Type.IsAssignableFrom它的返回值規定:

真,如果c和當前Type表示相同的類型,或者如果當前類型是在C的繼承層次結構,或者如果當前類型是一個接口是c器具,或者,如果c是一個通用的類型參數和當前Type表示C的約束之一,或如果c表示值類型和當前的類型代表Nullable<c>。如果這些條件都不成立,或者c爲空,則返回false。

這些條件都不是真的,所以它返回false

+0

也見[如何判斷類型A是否隱式轉換爲類型B](http://stackoverflow.com/questions/2224266/how-to-告訴,如果類型是一種可以隱式轉換爲類型b) – Justin 2013-03-06 17:18:06

+0

謝謝。該方法比名稱建議複雜得多。 – 2013-03-06 19:04:54

1

你所問的問題是稍有不同。在C#的設定可分配的通常比集分配類型的CLR的更寬容。