2011-12-15 92 views
0

在我的代碼我有一個通用的「的getProperty」像這樣:如何從具有泛型返回類型的方法返回基元?

public T getProperty<T>(int GUID, string property) 
{ 
    PropertyComponent prop; 
    prop = propDict[GUID]; 
    if(property.Equals("visible")) return (T) (Boolean) prop.visible; 
    if(property.Equals("enabled")) return prop.enabled; 
    if(property.Equals("position")) return (T) (Object) prop.position; 
} 

Visual Studio的編譯器給我的第三學期沒有錯誤,因爲prop.position是一個Vector2。然而,Prop.visible和prop.enabled是bool s,所以當我嘗試以這種方式返回它們時,出現「無法將類型bool轉換爲T」(以及「無法將類型bool轉換爲T」的錯誤第二)。

在這種情況下返回bool的正確方法是什麼?

+2

`(T)(object)`是所有3個術語的正確組合。 – Marc 2011-12-15 02:15:50

+0

@Marc所以答案是,「你不能使用原語」? – 2011-12-15 03:08:54

回答

3

您可以將泛型類型參數約束爲類或結構(使用where子句),但在您的示例中,您將T類型視爲類和結構(bool值類型)。

如果您想要返回引用類型對象實例以及值類型數據(如bool),您將必須將值類型「框」到對象中,因爲引用類型對象是唯一的公分母參考類型和值類型之間。當您將一個值類型轉換爲Object時,會自動進行裝箱。所以,你所有的返回值都應該被改爲(T)(object)