我如何在不使用Delphi约束的情况下确定泛型类型为nil?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何在不使用Delphi约束的情况下确定泛型类型为nil?相关的知识,希望对你有一定的参考价值。

我想在不使用约束的情况下检查泛型类型是否为“有效”。

换句话说,我想编写以下代码:

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;

但是,这不会与错误一起编译:

E2571 Type parameter 'T' doesn't have class or interface constraint

显然,对于这样的类,我希望能够将任何类型设为TMaybe。

是否可以检查无约束类型是否为“有效”,即不为null? (我不在乎空字符串等)

我是否应该编写一个使用TypInfo进行识别的TypeIsEmpty<T>(aValue: T): Boolean?我想避免这种情况。

答案

尝试这样的事情:

另一答案

尝试这样的事情:

以上是关于我如何在不使用Delphi约束的情况下确定泛型类型为nil?的主要内容,如果未能解决你的问题,请参考以下文章

Delphi:泛型和类型约束

我们如何在不使用泛型类型进行自定义的情况下处理身份核心用户管理和用户存储的多个用户使用情况?

如何在不知道项目泛型类型参数的情况下对作为泛型给出的列表进行浅表复制? [复制]

c# 在不知道类型的情况下,如何判断并使用带泛型的扩展方法?

在没有泛型类约束的情况下,将泛型类型与其默认值进行比较,会产生编译时错误

在不知道类型是啥的情况下调用返回泛型集合的泛型方法? C#