调用泛型对象方法
本文关键字:方法 对象 泛型 调用 | 更新日期: 2023-09-27 18:08:44
我有一个方法,它将对象作为泛型传入。注意,这些对象不是从同一个类派生的。我有一个函数,我想调用它,而不管它的类型是什么,但是无法调用,因为它不能确定它的类型。
'T' does not contain a definition for 'Validate'
和代码
public void VerifyInput<T>(T obj)
{
((T)obj).Validate();
}
用于验证传入的用户数据。每个类都负责设置它们自己的验证,但它们不一定以任何方式相关。我已经简化了这一点,但基本问题仍然存在。如何转换泛型的类型来调用对象方法?
注意,这些对象不是从同一个类派生的。我有一个函数,我想调用它,而不管它的类型是什么,但是无法调用,因为它不能确定它的类型。
这是你应该使用接口的地方。
public interface IValidatable {
void Validate();
}
在你的方法
public void VerifyInput<T>(T obj) where T : IValidatable
{
obj.Validate();
}
这样做将确保传入的类型符合接口契约,但不会将其限制为特定的类型定义。
创建一个带有Validate()方法的接口IValidatable
,在每个类中实现它,并更改VerifyInput的输入以采用该接口并摆脱泛型类型。
public void VerifyInput(IValidatable obj)
{
obj.Validate();
}
事实上,你可以完全摆脱VerifyInput如果你这样做,只是调用验证的目标对象。