调用泛型对象方法

本文关键字:方法 对象 泛型 调用 | 更新日期: 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如果你这样做,只是调用验证的目标对象。