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]);
}
}
}