使用只有一个类型参数C#的具有通用接口的通用方法

时间:2019-11-20 17:13:00

标签: c# generics inheritance interface

我有这种具有通用接口的通用方法:

private TP GetSettings<T, TP>( ) where T : IProjectSettings<TP>, new()
    {
        var userSetting = new T();

        return userSetting.DefaultProjectSettings;
    }

我从该通用接口继承了此类:

internal class FutureAllowedDaysSettings : IProjectSettings<int>
{
    public string Name => "FutureAllowedDays";
    public int DefaultProjectSettings => 1;
}

通用接口

public interface IProjectSettings<T>
{
    string Name { get; }
    T DefaultProjectSettings { get; }
}

现在我想使用这种方法:

int res = GetSettings<FutureAllowedDaysSettings>();

但是我不能。我总是需要像这样传递第二种类型:

int res = GetSettings<FutureAllowedDaysSettings,int>();

但这很奇怪。 FutureCheckSettings是IProjectSettings,因此编译器应该知道第二种类型是int。因为如果我尝试将bool更改为int,就这样:

bool int = GetSettings<FutureAllowedDaysSettings,bool>();

我会得到错误: 类型参数数量不正确

为什么会发生这种情况,是否可以仅通过一种类型(FutureAllowedDaysSettings)调用此方法?如果没有,如何更改我的代码以使其成为可能?

0 个答案:

没有答案