判断一个变量是否是惰性类型

Determine if a variable is of a lazy type

快速提问 - 是否有任何 'prettier' 方法可以确定变量是否被延迟初始化而不是:

var paramType = param.GetType();
if (paramType.FullName.Contains("System.Lazy")) 
{
    ...
}

我知道这不是真正建议检查的东西,但特别需要区分它。

试试这个:

if (paramType.IsGenericType && paramType.GetGenericTypeDefinition() == typeof(Lazy<>))

如果 paramLazy<T>(并且 paramTypeparam.GetType()),它应该 return true

您可以改为比较参数的通用定义:

Lazy<int> test = new Lazy<int>();
Console.WriteLine(typeof(Lazy<>) == test.GetType().GetGenericTypeDefinition());

您可能希望保留静态变量中的 typeof(Lazy<>)

这里的两个极端情况是当类型不是构造泛型类型时,当类型是 Lazy 的子类型时。所以像

typeof(Lazy<>).IsAssignableFrom(paramType.IsConstructedGenericType?paramType.GetGenericTypeDefinition():null);