对动态类型进行自定义LINQ扩展

本文关键字:自定义 LINQ 扩展 动态 类型 | 更新日期: 2024-07-23 04:31:13

我有以下代码:

dynamic users = BLClass.MYBLMethod();
List<string> usernames = BLClass.MYBLSecondMethod();
foreach (string username in usernames)
{
    users[username].test();
}

我正在从BL方法中获取用户(动态类型)。接下来,我从其他方法中获取用户名列表。之后,我将foreach应用到用户名列表中。在这个循环中,我将一个方法称为"test"。这个"测试"方法将在我的JavaScript代码中使用。现在我的问题是如何将上面的代码转换为类似这样的扩展方法

BLClass.SomeExtensionMethod(methodname)

即我的SomeExtensionMethod将包含以下逻辑:

dynamic users = BLClass.MYBLMethod();
List<string> usernames = BLClass.MYBLSecondMethod();
foreach (string username in usernames)
{
    users[username].methodname();
}

你能帮我做这个分机吗?

编辑:

我的目标是拥有BLClass.SomeExtensionMethod(methodname)。我将在其中传递方法名称,其他内部代码(扩展内部)应该调用以下代码:

users[username].methodname();

对动态类型进行自定义LINQ扩展

我不知道您的类型是什么样子的,但您可以使用GetMethod()按名称调用方法。

public static class Extensions
{
    public static void SomeExtensionMethod(this BLClass blclass, string methodname)
    {
        dynamic users = blclass.MYBLMethod();
        List<string> usernames = blclass.MYBLSecondMethod();
        foreach (string username in usernames)
        {
            var user = users[username];
            user.GetType().GetMethod(methodname).Invoke(user, null);
        }
    }
}

不确定为什么需要这样做。。。

public class 1 {
    public void method(){
        //do stuff
    }
}
public class 2 {
    public void method2(){
        dynamic users = BLClass.MYBLMethod();
        List<string> usernames = BLClass.MYBLSecondMethod();
        foreach (string username in usernames)
        {
             1.method(users[username]);
         }
    }
 }

这会更简单吗?