可以减少类型参数的数量吗?

时间:2018-01-16 18:15:14

标签: c# type-parameter

我觉得很烦人,必须在下面的RunTest调用中指定Foo和FooFactory的类型。毕竟,如果测试知道Factory的类型,则暗示了Factory正在创建的类型。假设我想为不同类别的工厂运行许多不同的工厂测试,那就是很多尖括号,而且更丰富的类型层次结构会变得更糟。我想知道是否有可能对其进行重组以使测试更简洁。

public class Foo
{
}

public interface IFactory<T>
{
    T Create();
}

public class FooFactory : IFactory<Foo>
{
    public Foo Create()
      => new Foo();
}

public class FactoryTest
{
    internal void RunTest<TFactory, T>(TFactory factory)
        where TFactory : IFactory<T>
    {
        T t = factory.Create();
        Assert.NotEqual(default(T), t);
    }

    [Fact]
    public void FooFactoryWorks()
    {
        RunTest<FooFactory, Foo>(new FooFactory());
    }
}

1 个答案:

答案 0 :(得分:53)

不清楚TFactory必须是一个类型参数。我写这个:

internal void RunTest<T>(IFactory<T> factory)
{
    T t = factory.Create();
    Assert.NotEqual(default(T), t);
}

然后你可以使用:

RunTest(new FooFactory());

因为Foo可以由编译器推断。

相关问题