【发布时间】:2009-11-19 03:27:43
【问题描述】:
有没有办法确定作为参数传递给方法的变量的类型?考虑类:
TSomeClass = class
procedure AddToList<T: TDataType; U: TListClass<T>>(Element: T; List: U);
end;
方法实现
procedure TSomeClass.AddToList<T, U>(Element: T; List: U);
begin
if Element is TInt then
List.AddElement(TInt.Create(XXX))
else if Element is TString then
List.AddElement(TString.Create(YYY));
end;
其中 TInt.Create() 和 TString.Create() 具有不同的参数集,但它们都继承自 TDataType。
现在,我知道 is-operator 不能像这样使用,但是有没有合法的替代方法可以满足我的要求?
【问题讨论】:
-
如果您在泛型代码中做的第一件事是为每个可能的泛型值编写特定于类型的代码,那么您就不再编写泛型代码了。这不是使用泛型的地方。
-
感谢 Rob 的输入。当我在 SO(和其他地方)发布问题时,我通常会想出我真实代码的简化版本。根据我的经验,提取问题的本质比呈现真实世界的代码更有用——代码通常要复杂得多。所以请考虑上面的代码说明一个更大的问题。顺便说一句:我很想了解上述代码的替代方案。请查看我的后续问题:stackoverflow.com/questions/1761487/…。我期待着对该帖子的任何意见! :)