判断一个变量是否是惰性类型
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<>))
如果 param
是 Lazy<T>
(并且 paramType
是 param.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);
快速提问 - 是否有任何 'prettier' 方法可以确定变量是否被延迟初始化而不是:
var paramType = param.GetType();
if (paramType.FullName.Contains("System.Lazy"))
{
...
}
我知道这不是真正建议检查的东西,但特别需要区分它。
试试这个:
if (paramType.IsGenericType && paramType.GetGenericTypeDefinition() == typeof(Lazy<>))
如果 param
是 Lazy<T>
(并且 paramType
是 param.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);