【问题标题】:Determine if a variable is of a lazy type确定变量是否属于惰性类型
【发布时间】:2020-01-01 18:13:30
【问题描述】:

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

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

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

【问题讨论】:

  • 定义“更漂亮”。你可以使用typeof(Lazy<>).IsAssignableFrom(param.GetType())之类的东西吗?见stackoverflow.com/questions/5461295/…
  • @CodeCaster 返回 false
  • @Haytam 我知道,因此我链接到一个正确处理开放泛型类型的问题。
  • 您能多谈谈您的特殊需求吗?可能有更好的方法来解决实际问题。这闻起来像是 xy 问题。

标签: c# lazy-initialization .net-4.7


【解决方案1】:

试试这个:

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

如果paramLazy&lt;T&gt;(并且paramTypeparam.GetType()),它应该返回true

【讨论】:

    【解决方案2】:

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

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

    您可能希望在静态变量中保留typeof(Lazy&lt;&gt;)

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-27
        • 1970-01-01
        • 1970-01-01
        • 2022-07-23
        • 2010-12-25
        • 2012-06-17
        • 1970-01-01
        • 2011-01-13
        相关资源
        最近更新 更多