【发布时间】:2011-09-22 13:29:16
【问题描述】:
你如何执行Get,当你只有:T表示为一个Type对象,即
Type type=typeof(int);
还有参数 param1 和 param2?
public void DoCall(){
var type=typeof(int);
// object o=Get<type> ("p1","p2"); //<-- wont work (expected)
// *** what should go here? ***
}
public IEnumerable<T> Get<T>(string param1,string param2) {
throw new NotImplementedException();
}
【问题讨论】:
-
这种泛型方法是为了编译时的类型安全。如果您在编译时不知道类型,则很有可能您使用了错误的泛型,或者应该有一个额外的重载,该重载将类型作为参数,例如
public IEnumerable Get(Type type, string param1, string param2)。 -
@Jamiec:感谢 Jamiec 的评论。我会记住这一点。保留
的一个原因是我想尽可能使用 。在这种情况下,我不得不放弃 的用法,或者采用两个方法签名(一个带有 ,另一个带有 Get(Type typ, ...) -
@sgtz - 有两种方法是处理这两种可能性的通常方法。这是大多数 DA 库处理这种情况的方式。