2014-02-14 36 views
1

我需要是這樣的:函數的結果是通用

function fn_get_all_propperties (obj : TObject) : TObjectList<TTypeKind>; 

但: [DCC錯誤] uFuncMain.pas(20):E2511類型參數 'T' 必須是類的類型

什麼類型應該是函數的結果?

+1

參見[?'什麼的E2511類型參數「T」必須是一個類類型的編譯器錯誤的意思'](http://stackoverflow.com/q/17741092/ 576719)。 –

+0

我什麼都不懂( – user1879841

+2

@ user1879841:官方[泛型概述](http://docwiki.embarcadero.com/RADStudio/en/Overview_of_Generics),特別是[泛型約束](http://docwiki.embarcadero。 'TTypeKind'不是一個類,它是一個枚舉變量,你需要一個'TList <>',而不是'TObjectList <>':''函數fn_get_all_properties(obj:TObject):TList ;' –

回答

2

的問題是,TObjectList定義如下:

TObjectList<T: class> = class(TList) 
    .... 
end; 

在定義中的T: class意味着通用參數Tconstrained成爲class。但TTypeKind不是一個類。這是一種價值類型。

因此,編譯器會拒絕您嘗試的泛型實例,因爲它不符合約束。

所以你不能在這裏使用TObjectList<T>,而應該使用TList<T>。你的函數應該這樣定義的:

function fn_get_all_properties(obj: TObject): TList<TTypeKind>;