对动态类型进行自定义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();
我不知道您的类型是什么样子的,但您可以使用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]);
}
}
}
这会更简单吗?