如何将 STATIC class 值与 LIST 或 LAMBDA EXPRESSION 一起使用?

How to use STATIC class value with LIST or LAMBDA EXPRESSION?

这是我的示例代码。

public class Sample
{
    public void Main()
    {
        Execute01<DB_MS_A>();
        Execute02<DB_MS_A>();

        Execute01<DB_MS_B>();
        Execute02<DB_MS_B>();

        Execute01<DB_MS_C>();
        Execute02<DB_MS_C>();
    }
           
    public void Execute01<DbModel>()
        where DbModel : IDatabaseModel
    {
        // do something...
    }

    public void Execute02<DbModel>()
        where DbModel : IDatabaseModel
    {
        // do something...
    }
}

为了不浪费代码行,我想修改Main方法代码如下。

    public void Main()
    {
        var dbList = new List<dynamic>() {
            DB_MS_A,
            DB_MS_B,
            DB_MS_C
        };

        dbList.ForEach(db => {
            Execute01<db>();
            Execute02<db>();
        });
    }

但是给List添加静态值似乎是不可能的。 也无法将静态值作为 lambda 参数传递。

有方法重构吗?

我认为您可以简单地使用类型列表:

var listInputType = new []{
        typeof(string), 
        typeof(int),
}; 

但我认为您不能将 运行 时间类型传递给 generique,因为它们需要编译类型。
但是我们可以像在这个 SO 问题中那样使用反射:C# use System.Type as Generic parameter.

public class Program
{
    public static void Main()
    {
        var listInputType = new []{
                typeof(string), 
                typeof(int),
        }; 
        
        foreach(var myType in listInputType){
            typeof(Program).GetMethod("M1").MakeGenericMethod(myType).Invoke(null, null);
            typeof(Program).GetMethod("M2").MakeGenericMethod(myType).Invoke(null, null);
        }
    }

    public static void M1<t>()
    {
        Console.WriteLine($"M1<{typeof(t).Name}>()");
    }

    public static void M2<t>()
    {
        Console.WriteLine($"M2<{typeof(t).Name}>()");
    }
}

C# online demo