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

Wil*_*sch 18 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());
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 53

目前尚不清楚它TFactory必须是一个类型参数.我写这个:

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

然后你可以使用:

RunTest(new FooFactory());
Run Code Online (Sandbox Code Playgroud)

Foo可以由编译器来推断.

  • @BitcoinMurderousManiac:你绝对不应该只是寻找我的答案并全力支持他们.这是串行投票,并将自动撤消. (2认同)