我有接下来的两种方法:
public static string[] Method1(CustomObj co)
{
return new string[] {co.X,co.Y };
}
public static string[][] Method2(IQueryable<CustomObj> cos)
{
string[][] s = new string[cos.Count()][];
int i = 0;
foreach (var co in cos)
{
s.SetValue(Method1(co), i);
i++;
}
return s;
}
我想创建一个泛型方法而不是Method2,比如
static string[][] Method2(this IQueryable query, string method1Name)
任何提示?
感谢。
答案 0 :(得分:1)
在我看来,你可以做到:
string[][] ret = query.Select(x => Method1(x)).ToArray();
或
string[][] ret = query.Select<CustomObject, string[]>(Method1).ToArray();
首先,根本不需要编写额外的方法。有什么理由不这样做?如果你真的需要它来采用方法 name 那么你需要使用一些反思 - 但我建议你尽可能避免这种情况。
答案 1 :(得分:0)
您是否必须传入方法名称的字符串?这不是微不足道的。
大多数LINQ扩展方法都使用lambda来调用方法:
public static string[][] Method2(this IQueryable<CustomObj> cos, Func<CustomObj, string[]> func)
{
string[][] s = new string[cos.Count()][];
int i = 0;
foreach (var co in cos)
{
s.SetValue(func(co), i);
i++;
}
return s;
}
然后你可以这样称呼它:
iqueryableobject.Method2(x => Method1(x));
答案 2 :(得分:0)
您想要的是使用方法1作为代理。
public delegate string[] MyDelegate<T>(T obj);
public static string Method2<T>(this IQueryAble<T> cos, MyDelegate<T> function1)
{
string[][] s = new string[cos.Count()][];
int i = 0;
foreach (var co in cos)
{
s.SetValue(function1(co), i);
i++;
}
}