调用不同类型的通用方法(使用泛型?)

本文关键字:泛型 方法 同类型 调用 | 更新日期: 2023-09-27 18:25:48

我有两个类ClassOneClassTwo,它们分别实现了一个同名的方法:Validate()。我想从我的Process<>()方法中调用这些类中的每一个的Validate()方法:

public void Process<T>(Map<T> map, T value)
{
    var validation = value.Validate();
    var result = map(value);
    SendEmail(result);
    SaveAsFile(value.ToString());
}

这种方法是这样使用的:

Process<ClassOne>(new ClassOneMap(), new ClassOne())
Process<ClassTwo>(new ClassTwoMap(), new ClassTwo())

但这不起作用,因为类型T没有方法Validate()

我必须做些什么才能使Process<T>()工作?

调用不同类型的通用方法(使用泛型?)

您需要引入一个抽象基类,或者更好的是,引入一个带有Validate()方法的名为Validatable的接口,并且您需要使每个类型扩展该抽象基类,或(更好的是)实现该接口。

然后,您的Process()方法将如下所示:

public void Process<T>(Map<T> map, T value) 
    where T: Validatable
{
}