我有一个传递对象作为泛型的方法。请注意,这些对象不是从同一个类派生的。我有一个函数,无论类型如何都要调用,但由于无法确定类型,因此无法调用。
'T' does not contain a definition for 'Validate'
代码
public void VerifyInput<T>(T obj)
{
((T)obj).Validate();
}
这用于验证传入的用户数据。每个类都负责设置自己的验证,但它们不一定以任何方式相关。 我简化了这个,但基本问题仍然存在。如何转换泛型类型以调用对象方法?
答案 0 :(得分:2)
使用Validate()方法创建一个接口IValidatable
,在每个类中实现它,并更改VerifyInput的输入以获取该接口并删除泛型类型。
public void VerifyInput(IValidatable obj)
{
obj.Validate();
}
事实上,如果你这样做,你可以完全摆脱VerifyInput,只需在目标对象上调用validate。
答案 1 :(得分:2)
请注意,这些对象并非来自同一个类。我有一个函数,无论类型如何都要调用,但由于无法确定类型,因此无法调用。
这是您应该使用界面的地方。
public interface IValidatable {
void Validate();
}
关于你的方法
public void VerifyInput<T>(T obj) where T : IValidatable
{
obj.Validate();
}
执行此操作将确保传入的类型符合接口合同,但不会将其限制为特定的类型定义。