1
我需要是這樣的:函數的結果是通用
function fn_get_all_propperties (obj : TObject) : TObjectList<TTypeKind>;
但: [DCC錯誤] uFuncMain.pas(20):E2511類型參數 'T' 必須是類的類型
什麼類型應該是函數的結果?
我需要是這樣的:函數的結果是通用
function fn_get_all_propperties (obj : TObject) : TObjectList<TTypeKind>;
但: [DCC錯誤] uFuncMain.pas(20):E2511類型參數 'T' 必須是類的類型
什麼類型應該是函數的結果?
的問題是,TObjectList
定義如下:
TObjectList<T: class> = class(TList)
....
end;
在定義中的T: class
意味着通用參數T
是constrained成爲class
。但TTypeKind
不是一個類。這是一種價值類型。
因此,編譯器會拒絕您嘗試的泛型實例,因爲它不符合約束。
所以你不能在這裏使用TObjectList<T>
,而應該使用TList<T>
。你的函數應該這樣定義的:
function fn_get_all_properties(obj: TObject): TList<TTypeKind>;
參見[?'什麼的E2511類型參數「T」必須是一個類類型的編譯器錯誤的意思'](http://stackoverflow.com/q/17741092/ 576719)。 –
我什麼都不懂( – user1879841
@ user1879841:官方[泛型概述](http://docwiki.embarcadero.com/RADStudio/en/Overview_of_Generics),特別是[泛型約束](http://docwiki.embarcadero。 'TTypeKind'不是一個類,它是一個枚舉變量,你需要一個'TList <>',而不是'TObjectList <>':''函數fn_get_all_properties(obj:TObject):TList;' –