我需要在页面中执行“FindAll”方法。此方法返回对象列表。
这是我执行“FindAll”的方法。 FindAll需要一个int并返回这些类的List。
public void ObjectSource(int inicio, object o)
{
Type tipo = o.GetType();
object MyObj = Activator.CreateInstance(tipo);
object[] args = new object[1];
args[0] = inicio;
List<object> list = new List<object>();
object method = tipo.InvokeMember("FindAll", BindingFlags.Default | BindingFlags.InvokeMethod, null, null, args);
}
当我执行ObjectSource时,它返回ok,但我无法访问结果。在VS2008中,我可以通过“ctrl + Alt + q”来显示列表,但是通过强制转换不起作用。
我忘了说:这个方法“FindAll”是静态的!
答案 0 :(得分:1)
这里发生的事情很少,首先,你的方法不会返回结果。
其次,当你确实返回对象时,没有什么能阻止你在调用代码中转换为适当的类型。
第三,您可以使用泛型来强制键入此方法:
public T ObjectSource<T>(int inicio, T o)
{
Type tipo = typeof(T);
object MyObj = Activator.CreateInstance(tipo);
object[] args = new object[1];
args[0] = inicio;
return tipo.InvokeMember("FindAll", BindingFlags.Default | BindingFlags.InvokeMethod, null, null, args) as T;
}
答案 1 :(得分:1)
试试这个(更新):
public IEnumerable ObjectSource(int inicio, object o) {
Type type = o.GetType();
object[] args = new object[] { inicio };
object result = type.InvokeMember("FindAll",
BindingFlags.Default | BindingFlags.InvokeMethod, null, o, args);
return (IEnumerable) result;
}
更好的解决方案是将FindAll
方法放入接口 - 比如IFindable
,并使所有类都实现该接口。然后,您可以将对象转换为IFindable
并直接调用FindAll
- 无需反映。
答案 2 :(得分:0)
丹尼尔,我得到了一些对象,我需要绑定一个网格视图,这个列表超过1.000条记录,然后想要打50,这个对象源必须是通用的,因为它会调用类的FindAll! / p>