泛型类型参数的调用方法

AMK*_*AMK 2 c# generics methods list

我想编写一个通用方法,作为输入有一个通用对象列表.我想在每个列表项上调用一个方法.

我要做的是写一些像:

public void ResetPointProperties<T> (List<T> Points) 
{
    foreach (T point in Points)
    {
       point.Reset();
    }
}
Run Code Online (Sandbox Code Playgroud)

我如何调用Reset()我的列表项?

O. *_*per 5

你快到了.但是,缺少的是,就目前而言,编译器不知道每个T都是否有reset()方法.因此,您必须为需要实现接口的参数添加约束,或者从声明此类方法的类继承约束.TTreset()

例如,假设你在某个地方有以下界面:

public interface IThing
{
    void reset();
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以按如下方式声明上述方法:

public void ResetPointProperties<T> (List<T> Points)
    where T : IThing
Run Code Online (Sandbox Code Playgroud)

这强制传递给Ttype参数的任何类型都必须实现IThing.作为回报,编译器可以保证point在您的方法中实际上有一个reset()可以调用的方法.