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