确定变量是否为惰性类型



快速问题 - 是否有任何"更漂亮"的方法来确定变量是否被延迟初始化:

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

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

试试这个:

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

如果paramLazy<T>(并且paramTypeparam.GetType()(,它应该返回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);

相关内容

  • 没有找到相关文章

最新更新