我想用一些方法在delphi中编写一个函数,如下所示
procedure Foo<T>;
begin
if T = String then
begin
//Do something
end;
if T = Double then
begin
//Do something else
end;
end;
Run Code Online (Sandbox Code Playgroud)
即:我希望能够根据泛型类型做不同的事情
我尝试过使用TypeInfo,System但这似乎适合于对象而不是泛型类型.
我甚至不确定帕斯卡是否可行
我想在不使用约束的情况下检查泛型类型是否“有效”。
换句话说,我想编写以下代码:
class function TMaybe<T>.FromValue(aValue: T): TMaybe<T>;
begin
if T <> nil then
begin
Result := TMaybe<T>.Some(aValue);
end else
begin
Result := TMaybe<T>.None;
end;
end;
Run Code Online (Sandbox Code Playgroud)
但是,这不会编译错误:
E2571 Type parameter 'T' doesn't have class or interface constraint
Run Code Online (Sandbox Code Playgroud)
显然,对于这样的类,我希望能够将任何类型设为 TMaybe。
有没有办法检查无约束类型是否“有效”,即不为空?(我不在乎空字符串等)
我应该写一个TypeIsEmpty<T>(aValue: T): Boolean使用 TypInfo 来弄清楚的吗?我想避免这种情况。