System.RuntimeType
是派生自抽象基類System.Type
的具體類。由於System.RuntimeType
未公開,因此您通常會遇到System.Type
。
當您嘗試獲取對象的類型並錯誤地將GetType()
稱爲代表第一個對象類型的另一個對象時,可能會出現混淆,而不是直接使用該對象。然後Type.ToString()
將返回"System.RuntimeType"
當它被稱爲上的對象是代表類型:
string str = string.Empty;
Type strType = str.GetType();
Type strTypeType = strType.GetType();
strType.ToString(); // returns "System.string"
strTypeType.ToString(); // returns "System.RuntimeType"
例如,在this blog post有人試圖得到一個列的類型在數據庫中,做這樣的事情:
object val = reader.GetFieldType(index);
Type runtimeType = val.GetType();
PropertyInfo propInfo = runtimeType.GetProperty("UnderlyingSystemType");
Type type = (Type)propInfo.GetValue(val, null);
由於val已經是Type對象,因此val.GetType()將返回另一個Type對象,表示類型System.RuntimeTime
,因爲這是用於表示原始類型對象的具體類型。然後,博客文章顯示了一些不必要的反射掛羊頭賣狗肉,以獲得原始類型對象的類型,真的一切都需要的時候,這是:
Type type = reader.GetFieldType(index) as Type;
因此,如果您Type
對象報告說,它代表了一種System.RuntimeType
,確保你沒有意外地在你已經有的類型上調用GetType()
。
你能提供一個小程序,演示了您遇到的問題? – 2011-04-20 23:49:37
我去,但得到的答覆已:P – 2011-04-21 00:30:30