首页 > 解决方案 > 使用只有一个类型参数 C# 的泛型接口调用泛型方法

问题描述

我有这个带有通用接口的通用方法:

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)/如果不是,我该如何更改我的代码以使其成为可能?

标签: c#genericsinheritanceinterface

解决方案


推荐阅读