推断嵌套泛型类型参数

时间:2019-09-14 13:11:04

标签: c# generics

为演示该问题,我准备了以下代码:

public interface IParser<T>
{
    bool TryParse(string s, out T result);
}

public sealed class TimeSpanParser : IParser<TimeSpan>
{
    public bool TryParse(string s, out TimeSpan result)
    {
        result = TimeSpan.Zero;
        return true;
    }
}

public static class ParserService
{
    public static T Parse<TParser, T>(string s)
        where TParser : IParser<T>, new()
    {
        var parser = new TParser();
        parser.TryParse(s, out var result);
        return result;
    }
}

致电ParserService.Parse的方式是

var r = ParserService.Parse<TimeSpanParser, TimeSpan>("");

如您所见,我需要指定TimeSpan类型的参数。但是Parse方法的定义是

public static T Parse<TParser, T>(string s)
    where TParser : IParser<T>, new()

因此,我认为编译器可以通过T自动推断TParser。当我将TimeSpanParser作为类型参数传递时,我们知道TimeSpanParserIParser<TimeSpan>,所以TTimeSpan。是否可以不指定T

var r = ParserService.Parse<TimeSpanParser>("");

0 个答案:

没有答案