【问题标题】:How to pass and iterate over List<T> in a generic function如何在泛型函数中传递和迭代 List<T>
【发布时间】:2022-01-04 06:37:49
【问题描述】:

首先,这段代码的目的是在需要时重置类的静态变量,我知道这不是一个优雅的解决方案,但至少目前只能这样做。 这是代码

public static void ResetStaticObjects<T>()
{
    var type = typeof(T);
    if (type != null)
    {
        var items = type.GetProperties(BindingFlags.Public | BindingFlags.Static);
        foreach (var item in items)
        {
            item.SetValue(type, null, null);
        }
    }
}

这就是我现在的称呼

HelperClass.ResetStaticObjects<DemoClass>();

我想要的是传递一个列表而不是传递一个类,然后在所有这些类上调用相同的函数

【问题讨论】:

  • 你不能写一个有 N 个类型参数的泛型函数。在这种情况下,您必须将 IEnumerable&lt;Type&gt; 传递给函数。 HelperClass.ResetStaticObjects(new [] { typeof(Type1), typeof(Type2), typeof(Type3)});
  • 你不能只将ValueTypes设置为NULL,你必须检查每个属性不是ValueType
  • typeof(T) 什么时候会为空?有什么办法typeof 可能返回 null
  • @Flydog57 不,它不会为空
  • @Learning - 谢谢。

标签: c# asp.net-core static-methods system.reflection


【解决方案1】:

下面是我发布的问题的答案

public static void ResetStaticObjects<Type>(IEnumerable<Type>types)where Type:System.Type
{
     foreach(var item in types)
     {         
              var props = item.GetProperties(BindingFlags.Public | BindingFlags.Static);
              foreach (var prop in props)
              {
                  prop.SetValue(item, null, null);
              }        
     }
}

我们可以这样称呼它

HelperClass.ResetStaticObjects(new[] { typeof(Class1), typeof(Class2)});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2020-02-21
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多