C# 在动态类型上创建自定义LINQ扩展

C# 在动态类型上创建自定义LINQ扩展,c#,c#-4.0,dynamic,extension-methods,C#,C# 4.0,Dynamic,Extension Methods,我有以下代码: dynamic users = BLClass.MYBLMethod(); List<string> usernames = BLClass.MYBLSecondMethod(); foreach (string username in usernames) { users[username].test(); } i、 e我的SomeExtensionMethod将包含以下逻辑: dynamic users = BLClass.MYBLMethod(); L

我有以下代码:

dynamic users = BLClass.MYBLMethod();
List<string> usernames = BLClass.MYBLSecondMethod();
foreach (string username in usernames)
{
    users[username].test();
}
i、 e我的SomeExtensionMethod将包含以下逻辑:

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

我不知道您的类型到底是什么样的,但是您可以使用名称来调用方法

公共静态类扩展
{
公共静态void SomeExtensionMethod(此BLClass BLClass,string methodname)
{
动态用户=blclass.MYBLMethod();
List usernames=blclass.MYBLSecondMethod();
foreach(用户名中的字符串用户名)
{
var user=用户[用户名];
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]);
         }
    }
 }
公共类1{
公开作废法(){
//做事
}
}
公共2级{
公开作废方法2(){
动态用户=BLClass.MYBLMethod();
List usernames=BLClass.MYBLSecondMethod();
foreach(用户名中的字符串用户名)
{
1.方法(用户[用户名]);
}
}
}

这会更简单吗

我必须在多个地方使用此代码。最好是做一个扩展。你想做什么还不太清楚。您要扩展哪种类型?您的代码示例都是相同的!我想定制扩展“BLClass.SomeExtensionMethod().test()”,因此该方法应命名为
test
,并且您想要扩展的类型是
SomeExtensionMethod
的返回值是什么?是什么类型的?我已经编辑了我的问题。我将传递方法名test或test2或test3,下面的行用户[username]应该像users[username].test()或users[username].test2那样相应地调用该方法
users[username].methodname();
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]);
         }
    }
 }